Hallo! Ich bin im Rahmen eines Schulprojektes gerade dabei einen kleinen mobilen Roboter mit 2 Schrittmotoren und dem Leistungstreiber L298 sowie einem ATmega8 zu entwickeln. Zuerst habe ich einen Schrittmotor über ein normales Programm mit Warteschlangen und 4 Ausgabewechsel am Portd betrieben. Hat funktioniert. Jetzt möchte ich 2 Motoren (rechts und links) so betreiben, dass der eine Motor schnell und der andere langsam dreht, so dass eine kurve gefahren würde. Das habe ich mit 2 Intrerrupts gemacht, jeder Moter 1 Interrupt. Vorher wird festgelegt, welche Schrittfrequenz die Motoren jeweils haben sollen. Es funktioniert jedoch nichts und ich verzweifle. Ich bin sicher der Fehler ist für jemanden der forgeschritten ist leicht findbar. Bitte dringend um Hilfe! Datei im Anhang. Danke im Voraus, Jabu
Du hast vergessen die Anfangsschritte der Schrittmotoren mit 1 zu initialisieren. Dadurch kommt deine Taktfolge in den ISRs aus dem Tritt.
Oh das stimmt /-: Ich werde es gleich mal übernehmen und schauen ob es dann funktioniert (-: Danke für deine Mühe den Code umzuschreiben.
Nun funktioniert alles prima, tausend Dank für die Hilfe!
und hier noch was ...
1 | Motor1: dec Steptime1 ;Stepfrequenz einhalten |
2 | brne StillDelay1 |
3 | push A |
4 | push B |
5 | in A,SREG |
das sichern des Statusregisters gehört immer an den Anfang der Int-Routine! (siehe auch Code von Helfer) Macht bei dir zwar in dem Fall nicht's, weil du innerhalb der Schleife im Hauptprogramm überhaupt nicht's machst. __________________________________________________
1 | .def A = r16 |
2 | ... |
3 | in A,SREG |
... wie schön das man sich auch beim AVR einen Akkumulator definieren kann - erinnert mich irgendwie in Z80 Zeiten. Sascha
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.