C-kod behöver er hjälp.... (WinAVR)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Sån rent omedelbart (har aldrig kört AVR) ser jag ingen interrupt-enabling i initialiseringen av USART'en.....eller också kanske du ska peka ut den för mig....fast strunt samma, jag kommer aldrig att köra med AVR.

Men kolla det med att enabla interrupten...
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Som jag fattat det så försöker jag köra med polling istället för interupt (jag trodde det var enklare)

Jag får väl återgå till PIC igen....
Erik_Lind
Inlägg: 97
Blev medlem: 2 maj 2005, 11:25:03

Inlägg av Erik_Lind »

björn skrev:
UCSRC = (1<<USBS | 3<<UCSZ0);
Ska det inte vara?

Kod: Markera allt

UCSRC = (1<<USBS) | ( 1<<UCSZ0);

Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Visst kör du med polling....sorry, är lite trött efter grannens festande i natt....
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

björn skrev:Jag har kopplat:

AVR->MAX203
RXD(pin14)->R1OUT(PIN 3)
TXD(PIN15)->T1IN(PIN2)

Sen har jag kopplat från serie porten till max 203 pin4 och pin5.

EDiT:tillägg:Jag får bara nollor i det andra terminalprogrammet med, tex om jag skall skicka 0xff blir det nollor bara.
Har du kopplat signal ground från serieporten till GND på avr:n?
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Låter märkligt det där. Säker på att AVR:en tar emot rätt värde från datorn?

Prova att köra med vanliga "8 bitar, ingen paritet, 1 stoppbit". Ställ in det i terminalprogrammet på datorn och ta bort dessa rader från AVR-koden:

Kod: Markera allt

/*set frameformat : 8 databits 2 stop bits*/
UCSRC = (1<<USBS | 3<<UCSZ0);
Erik_Linde: Det är inte ofta man ser någon annan siffra än 1 till vänster om vänsterskifttecknet, men i det här fallet ska det faktiskt vara en 3:a precis som det står.
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

vad kör du för typ av klocka? den interna 1Mhz eller kristall (den interna är oftast fördålig presition för att köra uarten på) sedan måste du sätta URSEL när du ska skriva till UCSRC annars kommer du att skriva till UBRRH (se data bladet på sidan 155)

så....
UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0);
då borde det fungera bättre

Det förklara också varför det enda du får tillbaka är noller...

Hoppas att det hjälper :)
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Tack för det, nu funkar det :D . och ja jag kör med den interna klockan, skall lägga på externa så fort jag får hem.

Tack alla för hjälpen, vad skulla man ta sig till utan er ??
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Bra att det löste sig så att du slapp gå tillbaka till PIC. ;)

Jag tycker du ska göra som jag skrev att helt strunta i att ändra värdet i UCSRC. Då blir det nämligen det vanliga med 8 databitar, ingen paritet och en stoppbit automatiskt.

Istället för att sätta både UBRRH och UBRRL när du ställer in baudraten så räcker det med att sätta UBRR till rätt 16-bitarsvärde, så sköter kompilatorn automatiskt uppdelningen i H- och L-delen av UBRR. Så här:

Kod: Markera allt

/*set budrate*/
UBRR = ubrr;
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Ja, väldigt skönt att slippa pic (viss humor, men sant). Ja det verkar betydligt smidigare att göra så.

cykze: Om jag använder UBRR istället får jag kompileringsfel, måste jag includa något mer än io.h för att använda det??
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

En fråga till, vad använd igentligen '|' till i c-programm? alltså när det används som i
UCSRC = (1<<USBS | 3<<UCSZ0);
eller
ADCSRA|=0x10;
?
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

"bitwise or", eller på svenska, "bitvis eller"
dvs 01000010 | 10010000 = 11010010

google är ett utmärkt verktyg när man undrar något ;)
http://www.google.se/search?hl=sv&q=c+% ... %B6k&meta=
första träffen var hjälpsam: http://www.difranco.net/cop2220/op-prec.htm
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

ok, tack. Förlåt för min dåliga googleförmåga....
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

björn skrev:cykze: Om jag använder UBRR istället får jag kompileringsfel, måste jag includa något mer än io.h för att använda det??
Fel av mig. På Mega16 ligger visst inte UBRRL (8 bitar) och UBRRH (8 bitar) efter varandra i minnet, därför fungerar det inte med UBRR (16 bitar) i det här fallet. Men i de flesta andra fall fungerar det att slå ihop två 8-bitarstilldelningar till en 16-bitarstilldelning på det sättet (t ex med TCNT0L och TCNT0H)...
frejo
Inlägg: 496
Blev medlem: 21 april 2004, 21:43:01
Ort: Linköping

Inlägg av frejo »

björn skrev:ok, tack. Förlåt för min dåliga googleförmåga....
Ingen fara, alltid kul att kunna hjälpa till ;)
Skriv svar