ATMega 8 Wert springt über

OP #4024023
Lesenswert?
• ▲
▼
Hallo,

ich bin gerade dabei beim Bau einer PWM Schaltung mit ATMega 8 als 
Steurung. Das Programm sieht so aus.

1
$regfile "m8adef.dat"
2
$crystal = 1000000
3

4
Config Portb.1 = Output
5

6
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
7

8
Compare1a = 1
9

10
Config Portd.0 = Input
11
Config Portd.1 = Input
12

13
Do
14

15
If Pind.0 = 0 Then
16
      Compare1a = Compare1a + 1
17
      If Compare1a > 255 Then Compare1a = 255
18
      Waitms 200
19
   End If
20
   If Pind.1 = 0 Then
21
      Compare1a = Compare1a - 1
22
      If Compare1a < 1 Then Compare1a = 1
23
      Waitms 200
24
   End If
25

26
Loop

Das Problem ist, das wenn ich an Portd.0 ein Dauerhaftes Signal habe, 
und der Wert 255 ereicht hat, das er wieder bei 1 anfängt.

Umgekehrt wenn ich zurück gehe und ich bei 1 angelange, bleibt er dann 
auch bei eins und wechselt nicht wieder zu 255.

Nun, suche ich den passenden Befehl, dass wenn Compare1a über 255 
ist, das es nicht weiter geht.

Danke für Antworten!
Gast #4024071
Lesenswert?
• ▲
▼
Simon R. schrieb:

> Ich habs jetzt so gelöst:
> If Pind.0 = 0 Then
>       Compare1a = Compare1a + 1
>       If Compare1a > 255 Then Compare1a = 0
>       If Compare1a = 0 Then Compare1a = 255
>       Waitms 200
>    End If

Geht nicht!

Sobald der Wert 255 erreicht ist schluss! 256 ist 0 also macht if > 255 
kein sinn! Zudem wenn 1a auf 0 gesetzt wird, so kommt

>       If Compare1a = 0 Then Compare1a = 255

und setzt es wieder auf 255!
Gast #4024081
Lesenswert?
• ▲
▼
Peter II schrieb:
> 255+1 ist nunmal 0, damit ist klar das das If nichts mehr machen kann.

Das Compare-Register des Timer1 ist ein 16Bit-Register.

Simon R. schrieb:
> Ich habs jetzt so gelöst:
> If Pind.0 = 0 Then
>       Compare1a = Compare1a + 1
>       If Compare1a > 255 Then Compare1a = 0
>       If Compare1a = 0 Then Compare1a = 255
>       Waitms 200
>    End If

Das ist Krampf, der Wurm ist woanders. Prinzipiell war Peter II's 
Beispiel richtig, bis auf die falsche Syntax.
Man prüft also vorher und erhöht nur, wenn man mit der Erhöhung 
innerhalb des zulässigen Bereichs liegt.
OP #4024092
Lesenswert?
• ▲
▼
Peter II schrieb:
> Floppy schrieb:
>> und setzt es wieder auf 255!
>
> das will er ja

Ja, das will ich. Wenn ich über den Wert kommme oder bei 255 soll 
Schluss sein. Und dann soll es nur noch zurück gehen 255=>254.. 0 und 
nicht 255=>0

MWS schrieb:
> Das ist Krampf, der Wurm ist woanders. Prinzipiell war Peter II's
> Beispiel richtig, bis auf die falsche Syntax.
> Man prüft also vorher und erhöht nur, wenn man mit der Erhöhung
> innerhalb des zulässigen Bereichs liegt.

Natürlich ist es ein Krampf, ich bekomme es aber nicht anders hin.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.