mikrocontroller.net

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


Autor: Tim Maler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Autor: Tim Maler (Gast)
Datum:

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

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

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

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

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

Autor: Gerd Laschinski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim Maler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Tim Maler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim Maler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurze Nachfrage:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.