C-kod behöver er hjälp.... (WinAVR)
Ska det inte vara?björn skrev:
UCSRC = (1<<USBS | 3<<UCSZ0);
Kod: Markera allt
UCSRC = (1<<USBS) | ( 1<<UCSZ0);
Har du kopplat signal ground från serieporten till GND på avr:n?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.
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:
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.
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);
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
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

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:

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;
"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
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
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)...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??