Forum: Mikrocontroller und Digitale Elektronik PWM Signal per UART ändern


von Tim Maler (Gast)


Lesenswert?

Hat vielleicht jemand einen Tipp für mich warum folgender Code nicht
funktioniert. Auf den empfang am UART wird auf jedenfall reagiert? (LED
toggled)
Aber die Variable PWM wird irgendwie nicht verändert... Komisch!
-----------------------------------------------------------

$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

On Urxc Onrxd                                               'auf
Interrupt des UART reagieren, also wenn neuen Wert empfangen
Enable Urxc
Enable Interrupts

Dim I As Byte
Dim Pwm As Word
Dim Temp As Integer

Config Portb = Output
Config Portc = Output

'Konfiguration des PWM-Signals, das an PinB.1 generiert wird
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B
Pwm = Clear Up , Prescale = 1


Pwm = 0                                                     'erstmal
lampe an

Do
'Endlosschleife

Compare1a = Pwm

Loop
End



'ISR-Handler bei UART-Interrupt

Onrxd:
I = Udr                                                     ' in I
steht empfangenes Zeichen (1 Byte)
Toggle Portb.0
'lichtprogramme

If I = "1" Then
Pwm = 900
End If

Return

'----------------------------------------------------------------------- 
-------

von Tim Maler (Gast)


Lesenswert?

Also ich bin echt am Verzweifeln. Oder liegt es vielleicht an den FUSES,
dass das nicht funktioniert...

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

Du solltest mal überprüfen, ob deine IF-Then-Abfrage auch richtig
ausgeführt wird (das LED-Togglen darein verlegen...).

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

Noch was: In C ist "1" was anderes als '1', vielleicht bei Bascom
auch...

von Gerd Laschinski (Gast)


Lesenswert?

Hallo Tim,

Du vergleichst die Variable I (Byte) mit "1" (string). Vielleicht
gibt das ein Problem. Probier doch mal: If I = 49 Then ...
Die Zahl 49 entspricht der "1".

Gruß
Gerd

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

>Die Zahl 49 entspricht der "1".

Was ich gesagt habe...
Übrigens ist '1' das Zeichen mit der Nummer 49 des
ASCII-Zeichensatz.
Eigentlich müsste aber auch der Vergleich If I = '1' Then...
funktionieren.

von Tim Maler (Gast)


Lesenswert?

Also irgendwie scheint der Fehler in der Programmzeile

Compare1a = Pwm

zu liegen. Wenn ich diese auskommentiere, wird die Variable richtig
gesetzt.
Die Einstellungen für das PWM-Signal sind aber eigentlich korrekt. Da
läuft was faul. Auch habe ich beobachtet, sobald ich PWM verwende, mein
ATmega8 nach kurzer Zeit geresetet wird und die Programmabarbeitung
beginnt wieder ganz von vorn. Woran liegt das zum Henker???

von Tim Maler (Gast)


Angehängte Dateien:

Lesenswert?

Habe das Ganze nochmals überprüft. Also sobald ich die
Compare1a-Anweisung benutze, wird mein ATmega8 andauernd geresetet.

Liegt das jetzt an meinem Programmcode. Ist doch eigentlich
ausgeschlossen.
Hat vermutlich was mit meinen FUSES zu tun. Vielleicht ist da irgend
eine zusätzlich RESET-Quelle eingestellt. Könnt ihr bitte mal in den
Anhang gucken.

Benutze einen externen Clock (4MHz) am XTAL1 Eingang.

von Tim Maler (Gast)


Lesenswert?

Kurze Nachfrage:

Läuft PWM überhaupt mit externem Takt oder wird immer der interne
verwendet?

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.