Forum: Mikrocontroller und Digitale Elektronik i2c Slave eine PWM programmieren


von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

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
von Sascha W. (sascha-w)


Lesenswert?

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
von christoph (Gast)


Lesenswert?

danke sascha,
manchmal ists wie verhext,
da sieht man die dümmsten fehler nicht

christoph
von Walter (Gast)


Lesenswert?

ein weiterer Fehler ist auch noch drin:
wenn zwischen switch(test) und test=0 im Interrupt ein weiteres Zeichen 
kommt, geht es verloren!
von Sascha W. (sascha-w)


Lesenswert?

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