ATMega32 USART probz

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

ATMega32 USART probz

Inlägg av rickeboy »

Tjenis... va inte igår man slängde in ett inlägg här inte :)
Ligger inne så gäller att hålla kunskaperna vid liv... here goes:

(Har kopplat AVRen till com porten på datorn)
Har lyckats få AVR:en att snacka via USARTen men det är ju inte rätt saker som kommer fram eller skickas tillbaka... koden: http://devinc.sytes.net/usart.c

Som sagt när jag skickar ngt från datorn till AVR:en så svarar den men den svarar ju inte rätt! Och om jag skickar ngt från AVR:en så kommer det inte fram rätt...

Datorn är rätt inställd (testat att koppla ihop TX o RX på datorn och det funkar, den echoar korrekt)... har kollat upp inställningarna i datorbladet till atmegan och anser :) att jag borde ha ställt in att rätt... eftersom jag tar emot och skickar OK så är det ju inte kopplingarna det är fel på iaf... och det verkar inte vara klockan som går fel heller... möjligtvis bauden eller ngt med formatet (5bitar,6,8 etc)... ideer?

AVR: ATMega32
OSC: keramisk resonator på 4Mhz
Baud: 9600
8:a bitar
no parity
1 stop bit

//rickeboy
dow
Inlägg: 17
Blev medlem: 4 december 2003, 13:26:46
Skype: alexander.lundh
Ort: Linköping
Kontakt:

Inlägg av dow »

Jag satt och fipplade med usarten för någon månad sedan, och hade ungefär samma problem som du. För mig var problemet att U2X biten (i UCSRA tror jag) ej var satt som jag ville. Utan att ha kollat i datablad eller så, men har du kollat att den är satt som den ska?
Jag är lite osäker på om den är hög eller låg by default nämligen.
Jaja, var en tanke bara.

Edit: stavning.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Jag hade lite liknande fel, kolla min tråd ( dock med atmega16) http://www.elektronikforumet.com/forum/ ... highlight=
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Tjena... tack för svaren... (ligger inne df det tar långtid innan jag svarar)

dow> har kollat U2X biten... gör ingen skillnad...
björn> va inte samma problem... jag får ju ut saker... bara att bitar etc inte hamnar där dem ska...

Okej om man ser till felen så känns det som om det kan vara två saker;

1. antingen är det min klocka som går fel vilket gör att bauden inte stämmer, eller så går klockan rätt men bauden är inställd fel

2. eller så är det ngn annan inställning som är fel dvs som har med 8-N-1 att göra... men dem ska man egentligen inte ens behöva röra då det är default från början...

hmm... ideer om hur man kollar klockan och bauden? Ska testa med en av mina andra ATMega32:or som jag inte har ställt in att använda extern klocka på... (lär dröja ett tag)... vet inte om det är ngn som kommer på ngt? Blir väl till att fråga på avrfreaks snart annars... (efter jag har testat ytterligare saker dock...)

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

Inlägg av Icecap »

Räkna aldrig med att något står rätt per default!

Ställ alltid alla registra rätt, det är så lite kod att det är löjligt och man sparar mycket besvär, datablad har iblant errata som man måste komplettera med.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

SIGNAL (SIG_UART_RECV) { // USART RX interrupt

ska vara,

SIGNAL (SIG_USART_RECV) { // USART RX interrupt

Det är en grej som jag också har råkat ut för. Kollar så märker du nog att AVR:en resetas också.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Icecap> Aight... hmm... OK :)

cykze> Hmm... om man kollar här(AVR-LIBC Online Manual) http://www.nongnu.org/avr-libc/user-man ... rupts.html konstaterar jag att SIG_USART_RECV inte finns med... SIG_USART0_RECV och SIG_USART1_RECV finns dock med... df jag antog att det skulle vara den jag har använt i koden... som faktiskt fungerar också... den "echoar" iaf tecknet som skickas till den... tror inte den resetas ska kolla när jag kommer hem (nästa helg... DHOW!!) Ska självklart ändra på att dock...

Som sagt när jag skickar ett tecken till AVR:en från PC:n får jag tillbaka ett tecken men det är ju inte samma som jag skickade... dvs AVR:en tror sig ta emot rätt tecken och skickar det igen... men det är ju fel pga ngt... frågan är bara vad... :humm:

//rickeboy
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

Prova skicka ett tecken som du vet skall vara ok. Hårdkåda att AVR:en skall skicka t.ex 'A' oavsett vad du trycker. Kommer det ett 'A' från serieporten är det inga problem med rutinen som skickar via USART. Då är det antagligen nåt som händer i dina övriga funktioner som behandlar det inmatade tecknet.

Kommer det något annat än 'A' har du antingen problem med din seriella rutin eller stop/start-bitar eller nån hårdvara.

Kolla också hur dina variabler är definierade. Använder du bit 7 eller inte? ASCII använder enbart de 7 lägsta bitarna i en byte. Använder du tecken som t.ex åäö så beror det på vad din terminal på datorn använder för teckenuppsättning om du skall få rätt värden tillbaka.

Mats
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

rickeboy skrev:Hmm... om man kollar här(AVR-LIBC Online Manual) http://www.nongnu.org/avr-libc/user-man ... rupts.html konstaterar jag att SIG_USART_RECV inte finns med... SIG_USART0_RECV och SIG_USART1_RECV finns dock med... df jag antog att det skulle vara den jag har använt i koden... som faktiskt fungerar också... den "echoar" iaf tecknet som skickas till den... tror inte den resetas ska kolla när jag kommer hem (nästa helg... DHOW!!) Ska självklart ändra på att dock...

Som sagt när jag skickar ett tecken till AVR:en från PC:n får jag tillbaka ett tecken men det är ju inte samma som jag skickade... dvs AVR:en tror sig ta emot rätt tecken och skickar det igen... men det är ju fel pga ngt... frågan är bara vad... :humm:
Kolla i header-filen till Mega32:an istället (iom32.h) för att ta reda på vilka interrupts som finns. Jag ser när jag kollar att både SIG_UART_RECV och SIG_USART_RECV fungerar. Så det är inte det som är fel. Jag ser heller inga fel i din kod.

Får du något !-tecken skickat till datorn efter att du har resetat AVR:en?

Kan du ge några exempel på tecken som du skickar och tecknena du får tillbaka. Man kan då jämföra bitarna och se om man ser något mönster...
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Kaggen> I koden har jag hårdkodat att det ska skickas ett !-tecken då allt är igång... det kommer dock inte ngt !-tecken utan ngt annat tecken som jag inte minns nu...

cykze> Hmm... header filerna.. hmm... sant... det va dessvärre ett tag sedan jag va hemma... kommer inte riktigt ihåg vilka tecken den svarar med eller vilket tecken den skickar istället för !-tecknet... hmm... har för mig det va ett "o" eller ";" som kom... hmm... återkommer i helgen om att...

Har kollat igenom koden själv 3000ggr... samt testat en massa... måste vara bauden och/eller start/stop bitsen och/eller antalet bitar som är felet... som sagt återkommer i helgen! :)

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

Inlägg av Icecap »

Låter definitivt som om att det är fel på baudraten.
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Tjenis! Helg och jag är faktiskt hemma! Och inte nog med att jag är hemma jag har lyckats fippla till mig 10 minuter att skriva här! WOHOO! :!:

Jaja... åter till mitt problem som jag hoppas någon fortfarande är villig att hjälpa mig med fastän jag själv har tok lite tid och inte ngn speciell hög uppdaterings hastighet på... jaja...

Följande har jag kollat nu: Har satt igång att och kollat vad jag får till baka om jag skickar visa bokstäver

Om jag skickar "a" (lilla a) för jag tillbaka "X" (stort X)
"l" (lilla l) => ";" (semi-kolon)

Tack!
//rickeboy
Skriv svar