Bra komma igångguider för AVR + C ?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

testa

if (PINC==0x02)
{PORTB=0x1}


Har du något mer anslutet på PORTC?
Testa med att sätta allt annat på PORTC till 0 eller plocka bara ut den du vill kolla(kan göras med en &-funktion om jag minns rätt).

EDIT:
if (PORTB&0x02==0x02)
{
PORTB=0x1
}
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Winavr gillar inte dendär koden.

µCn är en at90s2313 på en devplatta/programmerare med PD0-PD7 kopplade till leds och PD2-5 kopplade till tryckknappar. Så PORTC finns väl inte på denna cpu?

EDIT: Den senare koden accepterade WinAVR efter att jag lade ; efter PORTB raden. När jag kör koden så lyser en led hela tiden, oberoende av läget på knappen.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

:oops: Klart det skall vara PORTB=0x1;

Har glott lite i databladet för 2313at90s.
Jag blandade ihop PIN och PORT, testa detta istället!

if (PINB&0x02==0x02)
{
PORTD=0x1;
}

EDIT Gaaaaahhhhh......!!!! semikolon, (jag blir galen)
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Händer fortfarande inget... :(
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Alla leds funkar?

Skall du initiera stackpekar på 2313?

EDIT:

ldi r16,RAMEND ;Init Stack Pointer
out SPL,r16

Är ju asm, men det borde väl funka utan i C....

EDIT 2:
- Stackpekaren skall inte initieras i C

Snodde en initiering av 90s2313 från CodeVisionAVR (utvärderingsversionen)
PORTB är ut (leds)
PORTD är in (knappar)

Kod: Markera allt

#include <90s2313.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTB=0x00;
DDRB=0xFF;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1 output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
while (1)
      {
      // Place your code here

      };
}
Har du testat så du får ca: 5V när tryckknapparna är höga?
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

WinAVR vill inte kompliera dendär koden, den klagar på alla funktioner (undeclared (first use in this function)).

När jag tynger på tryckknapparna blir det 0V till AVRens ingångar, inte 5V.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Det är include-filen som bråkar.

Jag har aldrig kommit överens med aktivt låga tryckknappar, varför vet jag inte.
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Ok. Tack för hjälpen iaf.

Hoppas någon annan har erfarenheter av tryckknappar som blir låga när man tynger på dem..skulle vilja få detta att fungera nu..

Det måste väl finnas någon guide, eller hur har ni andra lärt er?
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Men.... vänta lite nu :humm:

Om du testar att tryckknappen blir noll så måste (borde) det funka.


if (PINB&0x02==0x0)
{
PORTD=0x1; //Fniss jag kom ihåg semikolon.
}
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

nä, inget händer fortfarande :(
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Gör ett test med aktivt hög tryckknapp, om det inte blir för mycket strul!
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

provade att dra 5V direkt till porten, näpp, inget händer då heller.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Kollat initieringarna av portarna?
leds funkar?
funkar att blinka med alla leds?
2313 funkar?
programmeringen av 2313 funkar?
glappkontakt? (jo jag vet men det kan va så enkelt)
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

All kod:

Kod: Markera allt

#include <avr/io.h>

int main(void)
  {
   DDRB = 0xFF;   	
   DDRD = 0x00;
   while(1)
    {


if (PORTB&0x02==0x02)
{
PORTB=0x1;
}
 }
  }

Har provat att blinka ledsen och de fungerar. 2313an (borde) fungera, samma sak fast jag lägger in en tiny2313. Programmeringen fungerar också.

Glappkontakt borde det inte vara.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Från din kod på förra sidan:

Kod: Markera allt

int main()
{
    DDRB = 0xFF;
    DDRD = 0x00;
    PORTB = 0xFF;

    while (1)
    {
        if (PORTD == _BV(2)) // Ändra till if (!(PIND & _BV(PD2)))
        {
            PORTB == _BV(0); // Ändra till PORTB = _BV(PB0);
        }
        else // Lägg till dessa rader för att märka skillnad när du sedan släpper upp knappen
        {
            PORTB = 0;
        }
    }
}
edit: lite
Skriv svar