Sida 1 av 1

Ta in pulser på en AVR

Postat: 6 april 2015, 21:03:17
av Glattnos
Jag har gjort ett litet kort med en ATiny13A som tar emot puls-signalerna från en mottagare till radiostyrda flygplan. Den skickar sedan vidare signaler för att styra en kamera.

Jag tar in en av signalerna direkt på en pinne med externt avbrott. I avbrottet kollas om pinnen är hög eller låg. Vid hög så nollas en räknare, vid låg så sparas värdet på räknaren. På så sätt mäts pulslängden hela tiden. Jag styr i nuläget bara en av/på funktion så programmet kollar om pulslängden är längre eller kortare än 1,5 ms och agerar därefter.

Det som är problemet är att det fungerar perfekt i flera minuter men sedan slutar det plötsligt att fungera. Den fastnar i på-läget.

På in-pinnarna har jag aktiverat de interna pull-up motstånden i AVR:en

Frågan är egentligen: Behöver man pull-up motstånd på in-pinnarna på en AVR för att få stabil avläsning på pulser från en radiocontrolled-mottagare? Kan det vara det som spökar att jag har gjort så eller ska jag söka problemet någon annanstans?

Re: Ta in pulser på en AVR

Postat: 6 april 2015, 22:32:09
av sodjan
Om mottagarens utgång "driver" signalen aktivt både som "hög" resp "låg", så
ska normalt ingen pullup (extern eller intern) behövas (men gör inte heller någon skada).

Sen så händer det att utgångar är av typen "open collector" vilket betyder att den
enbart drivs aktivt som "låg". I det fallet krävs något mer som ser till att signalen blir
hög då utgången inte driver den låg. Vanligtsvis en pullup (extern eller intern).

Det går så klart inte att se (med ögat) på mottagaren hur det är, antingen har man
tillgång till mottagarens dokumentation eller så kan man vanligtsvis se det med ett
oscillioskop. Om man kör utan pullup så blir signalen normalt "ful", man får en dålig
signal då den ska vara hög.

Är jord ("nollan") på AVR'en och mottagaren hoppkopplade?
Har AVR'en och mottagaren samma matningsspänning? Och vilken spänning?

De "flera minuter" som du talar om, är det samma tid varje gång? Är det efter en
reset av AVR'en? Har du tagit tiden?

Om det är samma tid varje gång så gissar jag på något problem med koden.
Om det är olika ("slumpvis") tid varje gång så gissar jag på något problem med hårdvaran.

Re: Ta in pulser på en AVR

Postat: 7 april 2015, 09:59:58
av Glattnos
Kanonbra info Sodjan :)

Ajaj då, jag inser en stor miss jag gjort när jag tänkte på dina frågor. "Nollan" är ihopkopplade på mottagare och AVR men matningen är INTE samma. Kan till och med vara så att mottagaren skickar en signal som är över AVR:ens maximalt tillåtna. AVR:en får 4.95-5.00 V via en regulator men vilken matnings-spänning mottagaren får har jag ju inte kollat :shock:

Antar att jag kan sätta en opto-kopplare på in-pinnen för att säkerställa att pinnen får samma spänning som AVR:en.

Det har inte varit samma tid varje gång, det har hänt någon gång mer eller mindre direkt efter att spänningen slagits på men oftast efter 1-3 minuter. Därför jag valt att rikta in felsökningen på hårdvaran i första hand.

Alltihop sitter i en quadcopter och jag testar alltid på väldigt säker plats efter varje ändring. Mottagaren matas från "flightcontrollern" och den spänningen har jag inte mätt, riktigt klumpigt att glömma det! Det är ju sannolikt att ut-pulserna från mottagaren har samma spänning som matningsspänningen in. Vissa mottagare fungerar ju med matningsspänningar upp till runt 7,4 Volt.
Svårt att hitta data om dessa prylar:
FlightController Devo-M
Mottagare Devo RX703A

Ska mäta och undersöka detta ikväll :) Tackar så länge!

Edit:
Det verkar som att Devo-M flightcontrollern är samma som APM vilket är opensource och då går det att läsa att den ska matas med 5.37 V som går genom en diod med 0.37 V drop så det ska bli 5 V ut till mottagaren. Har dock inte mätt vad powerboarden(voltregulatorn) i quaden ger men ska mäta ikväll.

Re: Ta in pulser på en AVR

Postat: 7 april 2015, 12:28:33
av Swech
Ett RC filter gör säkerligen gott.
Det låter mer som att processorn låser sig och det finns flera anledningar som är troliga.
Har du avkopplingar 100nF på processorns matning.
Har du extern pullup på Reset?

FLanktriggning kan skapa problem om det kommer en skur med interrupt.

Swech

Re: Ta in pulser på en AVR

Postat: 7 april 2015, 12:39:34
av Glattnos
Programmet fortsätter att rulla, den slutar bara reagera på min av/på-signal. Har fler funktioner som AVR:en styr och allt annat fortsätter fungera.

Jag har en 100nF mellan VCC och GND på AVR:en.
Hmmmm, jag har inte en extern pull up på reset :shock: kan det vara problemet? Det var ett tag sedan jag byggde något så jag glömde det :)

Re: Ta in pulser på en AVR

Postat: 7 april 2015, 14:34:42
av Icecap
Om det är problemet är svårt att svara på men det är generellt ett problem! Och det ska åtgärdas.

Men när allt annat fortsätter fungera är det dags att kolla vad som händer när den slutar fungera. Om det är interrupt-styrd kan det vara värd att kolla om interrupt-enable är aktiv eller inte.

Re: Ta in pulser på en AVR

Postat: 7 april 2015, 15:51:02
av Glattnos
Det var egentligen en retorisk fråga och ingen riktig fråga, men tack ändå :) Jag borde naturligtvis ha en pull-up på reset. Jag återkommer med utfallet av mina vidare tester :)

Re: Ta in pulser på en AVR

Postat: 8 april 2015, 12:28:17
av adent
Kör du AVR:en på kristall eller RC-oscillator? Din switch på sändaren, skickar den 1ms i ena läget och 2ms i andra läget, så det inte är för nära 1.5ms?

Jag gjorde liknande kod för länge sen och då körde jag med RC-oscillator, så jag vågade inte sätta 1.5ms fixed och sen kolla på vilken sida jag var utan jag detekterade bara stora "hopp" i pulslängd och togglade då min utgång. D.v.s. en långsam ändring till följd av att RC-oscillatorn driver föranledde inget omslag oavsett hur stor den var, bara den gick långsamt.

MVH: Mikael

Re: Ta in pulser på en AVR

Postat: 13 april 2015, 12:41:06
av Glattnos
adent: Mycket tänkvärt! Tackar för det. Jag kör den interna oscillatorn på 8 Mhz. Switchen ligger nära 1 och 2 ms i sina lägen så 1.5 ska vara mitt i mellan. Såg att den interna oscillatorn hade en ganska låg exakthet, +/-10%, om AVR:en instrueras att mäta tiden 1 ms så kan den tiden alltså vandra mellan 0.9 och 1.1 ms? Dock ska det finnas marginal för det i denna applikation.

Problemet tycks dock vara löst sedan jag satte en pull-up på reset :) Har testat flera gånger och allt har fungerat som det ska. Insåg att om programmet resetades sporadiskt skulle ändå de andra funktionerna bete sig som om allt fungerade, så jag kunde ha fel med mit påstående "programmet rullar vidare".
Att sätta 10Kohm pull-up på reset är det enda jag har gjort så det verkar som att det var enda problemet.

Angående spänningen på ingångarna så har visserligen AVR:en och mottagaren olika matningar, men båda är reglerad till 4.95-5.00 volt så jag antar att det inte är det som har vållat problem och det fungerar ju nu. Kommer nog att sätta en optokopplare på ingången ändå.

Tack för all hjälp :)

Re: Ta in pulser på en AVR

Postat: 13 april 2015, 15:42:56
av sodjan
> sedan jag satte en pull-up på reset

Ja, om du hade en helt *öppen* reset ingår så kan "anything happen".
Vifta lite med en hand över processorn och den resettar...

Re: Ta in pulser på en AVR

Postat: 14 april 2015, 00:45:04
av adent
Om den hade varit helt flytande så ja, men jag tror reset-pinnen på AVR:er har en svag intern pull-up.

Jo verkar så, iaf för nån modell: "The internal RESET Pull-Up resistor is specified to be between 30K Ohms and 60K Ohms."

Därmed inte sagt att man inte ska ha en extern pull up :)
Men det förklarar att det funkar bra på labbänk, men inte "IRL".

MVH: Mikael

Re: Ta in pulser på en AVR

Postat: 14 april 2015, 11:22:24
av sodjan
Hm, med en pullup (intern eller extern kvittar) på 30-60 K så tror jag inte
att något annat än direkt beröring kanske skulle kunna störa. Inte vanliga
spänningfält som uppstår då man "viftar med handen". Nu så minns jag
inte hur den aktuella miljön där detta satt var bekriven, i och för sig...

> iaf för nån modell...

Den aktuella modellen är väl intressantare i så fall.

Re: Ta in pulser på en AVR

Postat: 14 april 2015, 15:24:38
av adent
De flesta AVR:er är rätt lika men: För aktuell modell:

Pull-Up Resistor, Reset Pin VCC = 5.5V, input low min: 30 max: 80 kΩ

MVH: Mikael

Re: Ta in pulser på en AVR

Postat: 15 april 2015, 00:16:38
av Glattnos
Ja det interna pull up motståndet har jag haft aktiverat hela tiden.
Miljön för applikationen är störande med en 5.8 Ghz video-sändare ca 5 cm ifrån :mrgreen:

Funkar fortfarande perfekt :)