Forum: Mikrocontroller und Digitale Elektronik Empfänger- Servosignal mit Atmega 8 auswerten


von Joachim H. (husky)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

habe eine Verständinsfrage.

Möchte ein Empfängersignal mit einem Atmega 8 auswerten.
Tackt 3,68640 MHz

Programmablauf:

- (INT1) Interrupt bei steigender Flanke
  dieser Startet einen Timer 0

-OVF wird mitgezählt

- wenn kein high Signal am Pin = zählung überläufe ist zuende

-Auswerten (Sprungbefehle) nach der Anzahl der OVF Durchläufe

Habe das Programm im AVR Studio simuliert.
Wenn ich den Empfänger anschliesse reagiert der Atmega 8 nicht auf die 
Impulsänderung wenn ich am Sender das Signal verändere.

Wenn ich eine Rudermaschine betreibe funktioniert diese, somit sollte 
der Empfänger funktionieren.

Habe eine Frage zum Pull up.

Wenn ich den PinB,3 (eingang für INT1) auf Pull up schalte und auf 
steigende Flanke einen Interrupt auslösen möchte, macht das Probleme ?
Wenn das ankommende Signal auch einen high Pegel hat  ?

Das Signal müsste doch das gleiche sein als wenn ich eine Servo 
betreibe.

_!--!___!--!__

einen high Impuls von 1ms bis 2ms dann low Impuls bis die Periode von 
20ms voll ist , dann wieder high.....

Habe die Fues bit schon geändert von VCC 4.0  auf 2,7

Gibt es eine Möglichkeit im AVR Studio 4.0 ein wechselndes Signal wie 
das Eingangssignal zu simulieren ?.

Für einen Tipp wäre ich echt dankbar

vielen Dank im Voraus

Joachim

von Joachim H. (husky)


Angehängte Dateien:

Lesenswert?

das Programm

von STK500-Besitzer (Gast)


Lesenswert?

>Möchte ein Empfängersignal mit einem Atmega 8 auswerten.
Zum Millionsten Mal...



>Gibt es eine Möglichkeit im AVR Studio 4.0 ein wechselndes Signal wie
>das Eingangssignal zu simulieren ?.

jein: Man kann nach einer gewissen Zeit manuell den Portpin-Zustand 
ändern.

Besser/einfacher wäre es, das InputCapture-Modul des Mega8 zu benutzen.
Dazu gibt es auch diverse Beispiele hier im Forum.

Dein Programm habe ich mir nicht angeguckt (.aps dürfte ein 
AVRStudio-Projekt sein? Zum Angucken reicht der Quellcode.)

von STK500-Besitzer (Gast)


Lesenswert?

Man sollte nicht zu lange tippen...(da wird zwischendurch dann der Code 
gepostet...;)

Wie wäre es denn, wenn du erst mal den Timer startest und einfach laufen 
lässt.
In der Hauptschleife hast du dann zwei bis drei Werteschleifen:
die erste wartet auf einen L-Pegel an einem Eingangspin (als Sicherheit, 
falls der Controller mitten in einem Puls mit der Arbeit beginnt)

die zweite wartet auf einen H-Pegel am gleichen Eingangspin.
Wenn dieser Pegel erkannt wurde, speicherst du den Timer-Wert ab (man 
könnte den Timer auch jetzt erst starten).

die dritte Warteschleife wartet wieder auf einen L-Pegel am Eingangspin.
Wird der L-Pegel erkannt, wird wieder der Timer-Wert (in einer anderen 
Variable) gespeichert.

Subtrahiert man nur den ersten Wert vom zweiten erhält man die Anzahl 
der Taktzyklen, die der Controller zwischen den beiden Flanken getaktet 
wurde.

So habe ich das damals bei einem PIC gemacht, weil der keine vernünftige 
Interrupt-Struktur bot. Mehr passierte in dem Programm auch nicht bis 
auf die Anzeige des Steuerknüppelposition anhand von 8 LEDs (simple 
Division-durch-Subtraktionsschleifen-Routine).

Für einen Anfänger sollte das ein einfacher Einstieg sein, ohne gleich 
Probleme mit Interrupts zu bekommen.

von Joachim H. (husky)


Lesenswert?

Danke STK500-Besitzer,

für deine Tipps. Vielleicht braucht der Timer eine bischen Zeit ,um sich 
einzuschwingen zu können. Wenn die Signale kurz sind kann er vielleicht 
den Impuls nicht richtig auswerten.


Und für das Schlagwort "InputCapture-Modul " werde ich mich im Forum 
einlesen.

Danke für die neuen Denkanstösse !!!

Gruß
Joachim

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
Noch kein Account? Hier anmelden.