Hallo, hat hier schonmal jemand die Atmel Application Note "AVR446: Linear speed control of stepper motor on tinyAVR and megaAVR devices" auf den ATmega328P umgeschrieben? Würde die ganz gerne im Betrieb versuchen zu verstehen, habe mir auch schon die Application Note durchgelesen, dann aber festgestellt, dass sie aufgrund der fehlenden Include-Dateien und des älteren Compilers nicht einfach übersetzt werden kann..... Also hat jemand das Ganze auf den 328P umgeschrieben und würde es hier zur Verfügung stellen? Lieben Dank im Voraus ;) hansi haus
hansi haus schrieb: > Also hat jemand das Ganze auf den 328P umgeschrieben und würde es hier > zur Verfügung stellen? Warum ? AVR446 ist schon für M48 geschrieben, was brauchst du da für M328 umzuschreiben ?
weil es die Datei ioavr.h nicht gibt (No such file or directory) und inavr.h auch nicht. Ich verwende AtmelStudio 7 Beim kompilieren gibt es die o.g. Fehler.
hansi haus schrieb: > weil es die Datei ioavr.h nicht gibt (No such file or directory) > und inavr.h auch nicht. Ich verwende AtmelStudio 7 > Beim kompilieren gibt es die o.g. Fehler. Die sind für IAR, für GCC nimmt man ganz einfach: #include <avr/io.h>
Ich habe es jetzt versucht anzupassen und bekomme keine Fehler mehr. Im AtmelStudio Simulator läuft es auch, aber nicht richtig. Selbst wenn ich nur 10 Schritte vorgebe, bleibt das Programm im Endlosmodus und es wird permanent ein weiterer Schritt gemacht. Dann habe ich es auf meine Testschaltung geflasht und mit dem Oszi an den Pins gemessen. -> Es passiert nichts..... Wo kann der Fehler sein?
void main(void) { // Number of steps to move. int steps = 10; // Accelration to use. int acceleration = 10; // Deceleration to use. int deceleration = 10; // Speed to use. int speed = 400; // Tells if the received string was a valid command. char okCmd = FALSE; Init(); speed_cntr_Move(steps, acceleration, deceleration, speed); okCmd = TRUE; while(1){} // !! LEERER LOOP !! } main enthält einen leeren Loop ******************************** Der uC macht schlicht gar nichts ********************************
vorher wird speed_cntr_Move() aufgerufen. Das ist im Simulator aus zu sehen. Und ein Breakpoint beim Setzen des Ausgangs zeigt auch, dass diese Stelle nicht mehr verlassen wird und ständig ein Schritt gemacht wird.....
hansi haus schrieb: > Wo kann der Fehler sein? Vielleicht weil du die Frequenz nicht angepasst hast ? Mega48 läuft mit 3,68MHz, somit ist T1_FREQ total falsch und alle daraus folgenden kalkulationen auch..
Frequenz habe ich auch angepasst. Einmal mit internen 8 MHz, und auch einmal auf anderem Aufbau mit 16 MHz. Leider keine Besserung.
hansi haus schrieb: > Frequenz habe ich auch angepasst. Einmal mit internen 8 MHz, und auch > einmal auf anderem Aufbau mit 16 MHz. Leider keine Besserung. Leider zu viel Code fur genaues durchlesen. Dein Programm auf das notwendigste runterstrippen und langsam von vorne anfangen ?
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.