Hi, ähm und wo lese ich meinen Port ein?? Sollte ich da vielleicht in der Schleife meine Interrups abschalten?
Hi, ähm und wo lese ich meinen Port ein?? Sollte ich da vielleicht in der Schleife meine Interrups abschalten?
Gruß
MiniMax
Hallo
INT0 ist PD2 und INT1 ist PD3. In der Zählschleife muss man diese Ports eintragen:
Mit der Zählschleife kannst du aber auch jeden anderen Pin verwenden.Code:Do ' Warten bis aktiver Impuls zu Ende A = Pind.2 Loop Until A = 0 Do ' Warten bis Pause fertig A = Pind.2 Loop Until A = 1 Do A = Pind.2 Incr Counter ' Zähler erhöhen 'Waitus 2 Loop Until A = 0 ' Solange impuls ansteht
Bei gesperrten Interrupts wären die Werte genauer und reproduzierbarer, aber die Zählschleife dauert unter Umständen zwei Impulszyklen lang, also über 20ms. Das könnte deine interruptgesteuerten Funktionen stören.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Heißt im Klartext?
Gruß
MiniMax
Das bedeutet, du mußt es selbst ausprobieren. Ich kann bei meinem Programm die Interrupts nicht sperren, weil ich dann keine Servoimpulse mehr erzeuge.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hi, naja die Interrupts sperre ich net sondern ich benutzte sie!
Gruß
MiniMax
Also, Dein Projekt ist ja ganz schön groß, mit ´nem Haufen Subroutinen, Printbefehlen, etc., etc. Wenn´s dutzende Stellen gibt an denen es haken könnte, ist es manchmal ganz hilfreich, nochmal gaaaaanz von vorne anzufangen, und dann schön nacheinander Stufe für Stufe dazuzuprogrammieren. Dann merkt man nämlich sofort, bis wohin es geht - und ab wann nicht mehr.
Als erstes würde ich mal checken, ob der Controller den Empfängerimpuls überhaupt versteht. Ganz einfacher Code:
Hack´ das doch mal rein und schließ den Empfänger an den Eingang D.2 an. Das müsste je nach Knüppelstellung Werte zwischen etwa 60 und 120 geben.Code:$regfile=m32def.dat $Crystal=16000000 Config Timer2 = Timer, Prescale = 256 Stop Timer2 Timer2=0 Dim Zahl as Byte PORTD.2=1 'PullUp-Widerstand - für alle Fälle... Print "Test - Test" 'nur um zu sehen, ob die Kommunikation mit dem PC klappt... wait 1 Do Bitwait PIND.2, reset Bitwait PIND.2, set Start Timer2 Bitwait PIND.2, reset Stop Timer2 Zahl = Timer2 Timer2=0 Print Zahl waitms 500 Loop
Hi, also ichbekomme als Rückmelödung im Print folgende Werte:
Knüppel hinten: 69/70
Knüppel vorne: 118/119
Die werte schwanken immer um +- 1 oder +-2
Also dass geht ja schon ma - wie gehts weiter?
Gruß
MiniMax
Na also - dann haut die Schnittstelle RX->Timer doch schon mal hin!!Also dass geht ja schon ma - wie gehts weiter?
Ab hier gibt es schätzungsweise mindestens 7684 Möglichkeiten weiterzumachen! Leider fehlt mir im Moment die Zeit, mir alle möglichen neue Codes auszudenken - aber was noch viel schlimmer ist: Du würdest NIX dabei lernen
Wenn Du weißt wie man einen Timer konfiguriert, wie man mit Interrupts umgeht, und was die schlimmsten No-Go´s sind, wirst Du sicherlich in relativ kurzer Zeit Deinen eigenen Code zusammenbekommen - und eine Menge für neue Projekte lernen!
Und wenn nicht, solltest Du genau dort anfangen (wie es praktisch jeder hier in desem Forum irgendwann einmal gemacht hat). Eine Unmenge an Beiträgen zu den verschiedensten Themen findest Du im RN-Wissensbereich.
Ansonsten wird sich jeder hier Deine Entwürfe gerne ansehen und ggf. Verbesserungsvorschläge machen - fang´ einfach an!!
Hi, ich habe deinen Test Code nun mal einen Sub gelegt und wollte ihn immer aufrufen in der Hauptrotine aber der Timer1 funkt mir dazwischen was kann ich tun?
Gruß
MiniMax
...Code zeigen![]()
Lesezeichen