problem med Atmega 324PB, IRQ UART Frame Detect

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Dalmas
Inlägg: 226
Blev medlem: 30 maj 2013, 07:53:17

problem med Atmega 324PB, IRQ UART Frame Detect

Inlägg av Dalmas »

Jobbar med en Atmega 324PB och ska få ett startbyte på UART0 att väcka upp uP och skicka det vidare till UART1. Efter 15 ms kommer mer data. Det kan ibland komma skräp och det ska också lotsas vidare.
Nu låter jag uP gå ner i power-down och där ligger den tills ett IRQ från Frame-detect kommer MEN jag tycks inte få ur datat ur det bytet.
Vad är det för fel?? Har provat lite olika metoder. Använde mig av IRQ-RXC men den tycktes inte hitta första väcka-upp bytet. Sen tog jag bort Irq-RXC och ersatte den med en pollning.
Det funkade inte heller.
Givetvis funkar allt när jag tar bort sleep. Så jag misstänker nån form av startup problem. Jag har noterat att IRQ Frame Detect kommer ca 0.5ms efter sista biten i startupbytet.
När jag inte har sleep så kommer denna IRQ nån bit in i bytet.

Var kan jag leta? Fuses? Är det problemet?

Har extern oscillator på 16M. Använder inte extern klocka eller nåt. Använder en timer som prescalas ner med 1024. Den stängs av under sleep.

Tacksam för tips.
Användarvisningsbild
adent
Inlägg: 4094
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: problem med Atmega 324PB, IRQ UART Frame Detect

Inlägg av adent »

Det låter som du försöker använda UART:en med klockan till den avstängd?

Ett trick kan ju vara att ha pin-changeinterrupt på uart-pinnen, vakna på det och sen köra uart. Men då missar man minst en byte antar jag,
så det bygger på att det kommer flera wakeup-bytes.

MVH: Mikael
Användarvisningsbild
Dalmas
Inlägg: 226
Blev medlem: 30 maj 2013, 07:53:17

Re: problem med Atmega 324PB, IRQ UART Frame Detect

Inlägg av Dalmas »

Som jag kan förstå manualen så triggar Frame-Detect på start-syncen, dvs, när ena tråden går låg för att inleda en comm. I min okunskap trodde jag då att den drog igång nödvändiga klockor och klockade in bytet.

Jag har också på känn att det behövs fler startbyten men det blir svårare och sämre konstruktion. Jag kanske får acceptera att första startbytet går förlorat och själv lägga på 0x55+vänta 15 ms för att lotsa vidare datat som kommer (typ 20 byten).
Användarvisningsbild
Dalmas
Inlägg: 226
Blev medlem: 30 maj 2013, 07:53:17

Re: problem med Atmega 324PB, IRQ UART Frame Detect

Inlägg av Dalmas »

Summering:
Det visade sig vara den externa kristallen som gjorde att baudrategeneratorn hade svårt att klocka in datat under ca. 18 ms. Jag vet ärligt talat inte varför det blir sååå lång tid. Manualen säger 16kCL vilket betyder 1 ms.
Jag bytte till Interna 8Meg klockan. Då först fungerade det. Start frame funkar. Första bytet (som aktiverar Start-irq) kommer också in rätt (rxc-irq).
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: problem med Atmega 324PB, IRQ UART Frame Detect

Inlägg av Icecap »

Om kristallen slutar oscillera under väntan tar det en viss tid att få oscillatorn att svänga, detta delvist pga. kristallens låga bandbredd.

Man kan lösa det vid att byta till en keramisk resonator som startar mycket snabbare.
gkar
Inlägg: 1453
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

Re: problem med Atmega 324PB, IRQ UART Frame Detect

Inlägg av gkar »

Sniffa vid kristallen med något bra instrument, gissningsvis kommer du att se att den tar tid på sig att svänga ordentligt.

En variant är att inte stänga av kristalloscillatorn, om man har råd med det.
Användarvisningsbild
Dalmas
Inlägg: 226
Blev medlem: 30 maj 2013, 07:53:17

Re: problem med Atmega 324PB, IRQ UART Frame Detect

Inlägg av Dalmas »

Ska absolut titta på Keramisk Resonator.

Nej, tyvärr kostar det för mkt att ha kristallen gående. Troligtvis slutar det med att vi designar in en OSC avsedd för att driva baudrategeneratorn.

En lite undran här; vilken OSC man ska välja? Jag menar, uart använder ju nån logik som samplar varje bit ett antal gånger för att avgöra dess värde. Låt oss säga 16 gånger per bit. Om jag då (i vissa lägen kör jag 38.4 kbps) så blir det ju minimum 1MHz som OSC. Jag måste läsa 324PB.pdf lite mer.
Skriv svar