Sida 1 av 2

AVR UART problem

Postat: 14 december 2006, 00:56:09
av Isoz
Hej
här kommer en liten kul nöt att knäcka.....
Jag får
10 6D 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 03 10 82 02 10 03
vid läsning med dator (via STK 500ans fria serie port)
och
10 5B 20 00 00 00 00 00 00 00 00 34 10 30 10 E0
om jag låter en Atmega 88 läsa in den på serie porten och sedan skicka ut den på samma serieport...(har RX mot en GPS och Tx mot STK 500ans lediga serie port. (Borde få exakt samma sträng)

Om jag ställer in Hyperterminalen och kopplar in AVR'n där så får jag korrekt (skickat 'A' returneras som ett 'A')
Är det någon som har något förslag på fel?

Sitter med Atmega88 och Lassen LP GPS mottagare.
Har provat både med Interrupt styrd mottagning och en icke interrrupptbaserad

Tack på förhand
/Isoz

Postat: 14 december 2006, 01:11:39
av Andax
Vet inte vad du menar med "läsning med dator (via STK 500ans fria serie port)" men rent spontant känns det som om någon inställning i Atmega 88 gör att den inte kör med rätt baudrate.
Har du programmerat prescalers etc rätt?
Man kan ju nämligen ana att den första sekvensen 10 6D 03 ... blivit ihoptryckt ca 60 % och blir då 10 5B 20 ... pga av att serie signalen "samplas" felaktigt pga fel baudrate...

Postat: 14 december 2006, 01:31:21
av Radiohead
Detta problem har jag haft med AVR:en. Använder du intern RC-oscillator? Då är din tidsdelare som du anger i koden individuell för varje exemplar. Be mikrodatorn skicka ut nåt förutbestämt (som du anger i koden) till din dator och kika på det i ett oscilloskop. Se till att en etta har precis rätt längd.

Postat: 14 december 2006, 04:02:16
av bearing
0x55 är bra att skicka, för det är varannan etta och nolla.

Postat: 14 december 2006, 10:51:46
av Andax
Isoz, om du kör med RC-oscillatorn måste man sätta OSCCAL till rätt värde annars kan processorn gå fel ganska mycket.

Såg att det fanns en metod att kalibrera RC-oscillatorn via UART. Se länk. Dock behöver man nog ha satt OSCCAL till någorlunda rätt värde från början.

kalibrering av RC osc

Postat: 14 december 2006, 19:07:26
av Swech
Detta gäller gör AT Mega8535.. antar att det gäller även för 88an

Kalibreringen av RC osc läses in automatiskt och korrekt om du använder defaultfrekvensen, ATMega8535 har 1Mhz RC som default.
De övriga värdena för 2,4,8Mhz får man läsa av manuellt med t.ex. STK'n
Därefter kan man lägga in detta värde i eepromet och låta ditt program
läsa av och korrigera frekvensen.
Har själv stött på problem med uart vid RC.

Jonas / Swech Trading

Postat: 14 december 2006, 21:22:30
av RDX*
Väldigt ofta måste man kalibrera den internaoscillatorn för att kunna använda UART. När jag använder serieporten så kalibrerar jag avr:en med detta program.

Kod: Markera allt

$regfile="m16def.dat"
$crystal = 1000000
$baud = 9600

Dim A As Byte

For A = 0 To 255
Osccal = A
Print A
Next
AVR:en kommer att sända rapparkalja tills Osccal närmar sig det rätta värdet.

Postat: 14 december 2006, 21:49:18
av HMG
Jag har ett liknande problem. Får bara rapparkalja när jag skriver till seriellporten. Anväder ett ftdi-chip så usb istället för seriell. Använder en avr isp mkII. Jag kan programmera och radera kretsen men kan inte verifiera.

Provade exempelkoden ovan med oscal men fick ingen signal till hyperterminalen alls.

Ideer?

Postat: 15 december 2006, 02:10:33
av Isoz
Hmm många vettiga ideer är det...men om det är fel frekvens, hur kommer det sig då att den klara av att ta emot och returnera valfritt tecken mot PCn men inte när tecknet kommer ifrån GPS mottagaren...

för attt förtydliga det hela....
PC-> AVR-> PC = Helt ok
GPS->AVR->PC = Kajko
GPS->PC = Helt Ok

känns tveksamt till att det skulle vara klockan .... men jag får nog prova det (för att verkligen kunna utesluta det)

/Isoz

Postat: 15 december 2006, 08:40:07
av Gimbal
Har du dubbelkontrollerat med oscilloskop att du verkligen har rätt pinne från GPS'n kopplad till atmegan? Det är lätt gjort att bli fintad av raka/korskopplade seriekablar.

Postat: 16 december 2006, 22:04:47
av Swech
Pc'n kan tolerera mer variation i klockan hos Atmelen än vad GPS- atmel klarar... har haft samma problem.. funkade mot PC men inte mot "hemmabyggd" terminal...

Så - om du kör med STK500 ... läs av kalibreringsfaktorn för frekvensen du kör med, och lägg in i OSCCAL... detta löser alla gånger ditt problem

Jonas / Swech

Postat: 17 december 2006, 17:21:18
av Hedis
Vilken baudrate har du ut från gps´n?
Funkar det riktigt om du kör GPS-dator, o sen kör gps-AVR->Dator med samma baudrate?

Postat: 30 december 2006, 02:56:28
av Stinrew
Hur går det här egentligen? Isoz, kommer du framåt??

Postat: 30 december 2006, 09:41:02
av Radiohead
Har det inte försvunnit en del inlägg från den här tråden? Har för mig att det visade sig vara just fel på oscillatorn.

Postat: 30 december 2006, 19:25:33
av Stinrew
Jag vill också minnas att det var något med inexaktheten i den interna RC-oscillatorn.