Hallo, ich möchte gern mit einem Mega 16 (16Mhz) in Regelmäßigen Abständen ein TTL Signal erfassen das mit ca. 46khz An Zeit ca. 4 us Aus ca. 20 us Zeit unterwegs ist. Wenn sich im der Aus zeit etwas ändert möchte ich gern eine Aktion ausführen. Habe mir dazu was im Assembler Programmiert und im Simulator geht auch alles aber in der Praxis gibt es immer wieder "Fehlauslösungen" Wie würdet Ihr so etwas lösen? Signal liegt bei mir auf Port B1 an und sieht auch auf den Oszi ganz sauber aus. Das Signal erfasse ich mit sbis und sbic in schleifen Starte damit Timer 1 und wenn dann wieder low kommt stoppe ich den Timer wieder. lese den Wert aus glätte Ihn ein bisschen mit andi xxx,0b1111000 um kleinere Unregelmäßigkeiten zu beseitigen. Ist es möglich das der Controller die Relativ kurze "AN Zeit" mal übersieht und dann den Doppelten wert abliefert? Habe auch nichts da wie ich die Werte Sichtbar machen könnte. Habt ihr andere Vermutungen?
ich habe deine beschreibung deines algoritmus nich ganz verstanden, ohne source code kann man dir auch schlecht helfen, also mindestens der betreffende teil, besser noch das ganze ding damit man sieht wie ports und anderes IO eingestellt ist. für erkennung externer flanken oder auch Hi oder Low level gibts dafür extra interrupts mit noise-cancler. ich vermute die fehlauslösungen gibts durch kleine spikes, also noise. sowas kann man in software canceln, in dem du ein Hi oder Lo signal erst dann als korrekt anerkennt, wenn es unverändert n mal in folge gesampelt wurde, wobei n beliebig, der hardware noise cancler vom AVR will 4 clockcycles stabilen pegel sehen z.b. ein abblock-C von ein paar nF kannst du auch noch zusätzlich um analogen noise canceln an den pin tun.
also das mal ein 4 us Impuls übersehnen wird ist wohl ehr unwahrscheinlich sehe ich das richtig? eingsng abfragen schlei1: sibs PortB,1 ;warten auf high rjmp schlei1 schlei2: sbic PortB,1 ;warten auf low Timer starten rjmp schlei2 .. schlei3: sbic PortB,1 ;immer noch Low dann OK ansonsten Müll rjmp error .. schlei5: sibs PortB,1 ;wieder auf high warten und Timer Stoppen rjmp schlei5 Meinst Du so ? So richtig genau dürfte das nicht sein aber ich will ja unterschiede von min 14 uS bis ca. 29 uS erkennen können und dann etwas auslösen das dann wieder eine Anpassung vornimmt.
wenn ".." nicht zu lang ist, solltst Du keinen Impuls verpassen. Laß Doch dein Eingangssignal mal ruhen und schau dann, ob es überhaupt Auslösungen gibt (Fremdeinwirkung). Betriebsspannung sauber geglättet? Billig- Halogenlampe oder Lörkolben in der Nähe? (die streuen manchmal ganz schön..)
Hallo gibt es für die externen interrupts bestimmte Pins oder kann man diese frei zuweisen?
Ich wollte das lieber per Software lösen sonst muss ich die Platinen wieder "umkratzen" Also dann 4 Messwerte ermitteln im RAM Speichern vergleichen und wenn gleich den neuen wert als gültig übernehmen.
Also das Nächste mal vor dem Platinen machen - erstmal auf dem Steckbrett probieren.. :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.