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 '----------------------------------------------------------------------- -------
Also ich bin echt am Verzweifeln. Oder liegt es vielleicht an den FUSES, dass das nicht funktioniert...
Du solltest mal überprüfen, ob deine IF-Then-Abfrage auch richtig ausgeführt wird (das LED-Togglen darein verlegen...).
Noch was: In C ist "1" was anderes als '1', vielleicht bei Bascom auch...
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
>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.
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???
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.