mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Messwerte erfassen geht nicht richtig


Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Moritz E. (devmo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: asm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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..)

Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo gibt es für die externen interrupts bestimmte Pins oder kann man 
diese frei zuweisen?

Autor: asm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ersteres, siehe Datenblatt.

Autor: R--- S--- (rene66)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: asm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das Nächste mal vor dem Platinen machen - erstmal auf dem 
Steckbrett probieren.. :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.