ATMega 8 Wert springt über

OP #4024023
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 #4024040
geht so nicht.

Compare1a = Compare1a + 1
If Compare1a > 255 Then Compare1a = 255

255+1 ist nunmal 0, damit ist klar das das If nichts mehr machen kann.


if Compare1a < 255 Then  Compare1a + 1
Gast #4024071
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
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.
#4024086
Bedeutet aber das der wert immer 255 bleiben wird. die Funktion wird 
einmla hochzählen und dann nie wieder was machen.
Was genau mächte der TO denn haben, dann kann man ihm vielleicht ein 
paar tipps geben als hier an baustellen zu arbeiten, die schon einen 
denkfehler an sich birgen
OP #4024092
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.
OP #4024103
Chris L. schrieb:
> Spontan hätte ich jetzt so gesagt
>
> [code]
> If Pind.0 = 0 Then
>   If Compare1a < 255 Then Compare1a = Compare1a + 1
>   Waitms 200
> End If
> If Pind.1 = 0 Then
>   If Compare1a > 0 Then Compare1a = Compare1a - 1
>   Waitms 200
> End If
> [/code}

Danke! So funktioniert es auch und ich komme mit Pind.1 auch auf 
Comapre1a = 0

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.