Hallo, ich programmiere mit dem Atmega8 einen Slave für i2c. Dieser Slave soll über die Pins OCR1A/OCR1B eine PWM ausgeben. Mit einem Master (simuliert mit dem MySmartUSB_Terminal) schicke ich ihn die Buchstaben (8Bit) für die switch-Anweisung (siehe Code im Anhang). Problem: Das Senden der einzelnen Buchstaben und das "Springen" in die dafür angelegte case-Anweisung funktioniert, aber nur bei "v" funktioniert auch die pwm bei "h","l" und "r" nicht??? Habe das PWM-Programm auch auf einen Atmega8 (kein Slave) geschrieben, da funktionierts :( würde mich um Antwort freuen. Mit freundlichen Grüßen Christoph
Hallo, da der Wert von 'test' bis zum nächsten empfangenen Zeichen seinen Wert behält, werden die Berechnungen die du bei "h","l" und "r" ausführst ständig wiederholt und der OCR1A-Wert ändert sich schneller als die PWM läuft. Setze 'test' nach abarbeiten der case-Abschnitte auf 0. Oder führe die switch-Anweisung nur aus, wenn 'test' einen gültigen Wert hat.
1 | while (1) { |
2 | if (test<>0) { |
3 | switch (test) { |
4 | case ... |
5 | ....
|
6 | }
|
7 | test=0; |
8 | }
|
9 | }
|
Sascha
danke sascha, manchmal ists wie verhext, da sieht man die dümmsten fehler nicht christoph
ein weiterer Fehler ist auch noch drin: wenn zwischen switch(test) und test=0 im Interrupt ein weiteres Zeichen kommt, geht es verloren!
Walter schrieb: > ein weiterer Fehler ist auch noch drin: > wenn zwischen switch(test) und test=0 im Interrupt ein weiteres Zeichen > kommt, geht es verloren! Das würde ich unter den aktuellen Bedingungen ausschließen. Da die Main nichts weiter zu tun hat ist die Ausgabe der OC-Werte so schnell erledigt das in der Zeit kein zweites Zeichen kommen kann. Sollte die Main jedoch mal Funktionen enthalten, die signifikant rechenzeit brauchen - geb ich dir recht. Man könnte natürlich die Berechnung und PWM-Ausgabe auch gleich noch in die Empfangsroutine einbauen - auf die paar µs kommt's nicht an. 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.