8. Interrupts, Variablen, und PWM mit Beispielen

Anleitungen für "hausgemachte" LED Projekte

Moderator: T.Hoffmann

Antworten
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Sa, 13.01.07, 12:31

Im vorherigen Tut wurde die 1. Lösungsmöglichkeit mit dem Interrupts durch einen Taster bzw. I/O-Pins gelöst.

Nun, der Atmega8 hat nur 2 I/O-Pins (PD2 & PD3) die man als Interrupt verwenden kann.

Damit kommen wir zur 2. Lösung und zwar mit dem Timer-Interrupt. Mit dieser Lösung können wir sogar mehr I/O-Pins verwenden, somit mit mehr Tastern arbeiten.

Timer-Interrupt

Der Atmega8 bietet zwei Timer an (Timer0 und Timer1). Ein Timer kann man als einen integrierten Zähler bezeichnen.

Der Timer0 ist ein 8-bit Timer, somit arbeitet er von 0-255 (2 hoch 8 = 256).
Der Timer1 ist ein 16-bit Timer, somit arbeitet kann er von 0-65535 zählen (2 hoch 16 = 65536)

Durch folgende Befehle konfigurieren wir und aktivieren den Timer sowie Interrupt:

Code: Alles auswählen

Config Timer0 = Timer , Prescale = 8		'->Timer0 wird konfiguriert, Prescale = ist der Teiler
On Ovf0 Unserunterprogramm_isr				'->Bei Overflow soll er das "Unserunterprogramm_isr" aufrufen

Enable Timer0									   '->Aktivierung Timer0
Enable Interrupts								  '->Aktivierung Interrupt
Overflow bedeutet soviel wie Überlauf. Der Timer0 wird hochgezählt. Sobald 255 erreicht sind, fängt es wieder bei 0 an und es läuft über, also ein Overflow. Bei einem Overflow wird das Unterprogramm bzw. die ISR "Interrupt Service Routine" ausgeführt.

Der Prescale ist der Teiler. Mit diesem Teiler können wir die Timer-Geschwindigkeit/Durchslaufanzahl verringern. Es gibt verschiedene Teilerwerte: 1 , 8, 64, 256 oder 1024.

Wenn unser Atmega8 mit 1 Mhz getaktet ist sind es 1 000 000 hz.
Die 1000000 müssen durch den Teiler geteilt werden und anschließend durch 256 (für den Overflow).

z.B.:
Bei einem Teiler 1:
1000000/1/256= 3906,25 mal. In einer Sek. würde 3906,25 mal ein Overflow bzw. ISR stattfinden.

Bei einem Teiler 8:
1000000/8/256= 488,28 mal. In einer Sek. würde 488,28 mal ein Overflow bzw. ISR stattfinden.

In dem Unterprogramm soll er die IF-Funktion mit der Überprüfung nach dem Taster ausführen.
Um nicht das Hauptprogramm zusätzlich zu verlangsamen verwenden wir einen Prescaler von 8. Welches locker aureichend. Denn bei fast jeder zweiten Milisekunden findet eine Ausführung des Unterprogramms statt.

In dem Unterprogramm könnte man sogar mehrere IF-Abfragen zu mehreren Tasten durchführen.

Der gesamte fertige Code mit dem Unterprogramm/ISR sieht dann so aus:

Code: Alles auswählen

$regfile = "m8def.dat"

$crystal = 1000000

Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.2 = Input

Config Timer0 = Timer , Prescale = 8
On Ovf0 Unserunterprogramm_isr

Enable Timer0
Enable Interrupts

Taster1 Alias Pind.2
Led1 Alias Portd.5
Led2 Alias Portd.6

Do

Led1 = 1
Waitms 1000
Led1 = 0
Waitms 1000
Led2 = 1
Waitms 1000
Led2 = 0
Waitms 1000

Loop

Unserunterprogramm_isr:
If Taster1 = 1 Then
Led1 = 1
Led2 = 1
Waitms 500
Led1 = 0
Led2 = 0
End If
Return
Variablen
Wer schon mal programmiert und mit Variablen gearbeitet hat, kann sich das Durchlesen der Erklärung fast sparen :wink:

Einer Variabel kann ein Wert/Zeichen zugewissen werden. Die Variabel speichert sich den Wert/Zeichen und zum späteren Zeitpunkt kann man durch ansprechen der Variabel den Wert/Zeichen gelesen und z.B. weiterverarbeitet werden.

Mit folgendem Befehl wird eine Variabel deklariert:

Code: Alles auswählen

Dim Vari1 As Integer
"Vari1" ist der Name der Variabel und "Integer" ist der Typ der Variabel.

Typ "Integer" kann ein Wert von -32767 bis +32768 speichern
Typ "Byte" von 0 - 255

Weitere Typen kann man in der Hilfe von Bascom finden.

Mit diesem Befehl kann man der Variabel einen Wert zuweisen:

Code: Alles auswählen

Vari1 = 1000
Mit diesem Befehl den Wert der vorhandenen Variabel erhöhen:

Code: Alles auswählen

Vari1 = Vari1 + 100
Mit "-" anstatt "+" kann verringert werden...

Beim Typ "Byte" kann ein Overflow bzw. Überlauf statt finden. Wenn 255 erreicht sind und man erhöht es um eine 1, so springt es auf 0 und zählt weiter. Genauso umgekehrt mit dem subtrahieren...

Nun fragt Ihr euch bestimmt, wozu Variabel gut sind? Für PWM (Dimmen) benötigt man z.B.: Variabel, um die Helligkeit bzw. Frequenz zuändern.

PWM (Dimmen)
Um eine PWM zu erzeugen, muss die Leds ganz schnell ein- und ausgeschaltet werden.
Es gibt verschiedene Lösungen dafür:

Die einfachste Lösung wäre mit Pause:

Code: Alles auswählen

Led1 = 1
Waitms 1
Led1 = 0
Waitms 10
Die Led bleibt für 1 MS an und für 10 MS aus.

Möchte man die Frequenz über Tastern ändern können, so muss man mit Variablen arbeiten, hier der ganze Code:

Code: Alles auswählen


$regfile = "m8def.dat"

$crystal = 1000000

Config Pind.5 = Output
Config Pind.6 = Output

Config Int0 = Rising
Config Int1 = Rising
Enable Interrupts                                      
Enable Int0
Enable Int1
On Int0 Unterprogramm
On Int1 Unterprogramm2

Dim Laenge As Byte

Laenge = 0

Led1 Alias Portd.5
Led2 Alias Portd.6

Do

Led1 = 1
Waitms 1
Led1 = 0
Waitms Laenge
Loop                                                        '

Unterprogramm:

Laenge = Laenge + 1

Return

Unterprogramm2:

Laenge = Laenge - 1

Return

Im oberen Code wurde mit zwei Interrupts-I/Os bzw. Tastern gearbeitet.

Der 1. Taster erhöht die Auszeit somit verringert es die Helligkeit. Ab eine bestimmte Anzahl fängt die Led an sichtbar zu blinken.
Mit 2. Taster verringert man die Auszeit. Somit erhöht man die Helligkeit.

Eine viel bessere Lösung ist über eine IF-Schleife, damit lässt sich die Helligkeit über eine Variabel von 0-254 bestimmen:

Code: Alles auswählen

$regfile = "m8def.dat"

$crystal = 1000000

Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.2 = Input

Config Int0 = Rising
Config Int1 = Rising
Enable Interrupts                                           'einschalten der Interrupts
Enable Int0
Enable Int1
On Int0 Unterprogramm
On Int1 Unterprogramm2

Dim Zaehler As Byte
Dim Laenge As Byte

Laenge = 254

Led1 Alias Portd.5
Led2 Alias Portd.6

Do

If Zaehler > Laenge Then Led1 = 1 Else Led1 = 0
Zaehler = Zaehler - 1


Loop                                                        '

Unterprogramm:

Laenge = Laenge + 1

Return

Unterprogramm2:

Laenge = Laenge - 1

Return
Durch ändern der Variabel "Laenge" kann man die Frequenz bestimmen.

Wenn die Variabel "Zaehler" größer als "Laenge" ist. Wird die Led leuchten.
Die Variabel "Zaehler" wird nach jedem Durchlauf um 1 vermindert. Sobald 0 erreicht ist, fängt es wieder von 255 an.

Je größer der Wert "Laenge" (max. 254) ist, umso seltener wird die Led leuchten, denn nur wenn Zaehler=255 ist bzw. größer als "Laenge" leuchtet die Led. Je kleiner der Wert "Laenge" ist, desto häufiger wird die Led leuchten.
root
Mega-User
Mega-User
Beiträge: 459
Registriert: Di, 28.03.06, 21:32

So, 14.01.07, 23:27

Hab gerade deine Methode zur Erzeugung der PWM kurz überflogen, die Variante so wie du sie beschreibst geht sicherlich, keine Frage, jedoch wird mit dem Befehl waitms ein Unterprogramm aufgerufen, welches wiederrum Zeit für die Verarbeituung braucht. Je nach dem wie gering die Zeit sein soll, kann es damit zu "Verzögerungen" bzw. nicht einhalten der Zeiten kommen.
Für den Einstieg reicht es sicherlich(*), finde deine Tutorials auch sehr gut. Ich selber beschäffte mich auch ein wenig mit MCU's (wenn ich denn mal Zeit finde), programmiere aber vorzugsweise in C.

(*) andere Möglichkeiten ein PWM Singal zu erzeugen wäre über die Hardware PWM oder eine Software PWM, welche über einen Timer Interrupt arbeitet. Interrupts haben gegenüber Befehlen wie waitms den Vorteil, dass die nicht die ausführung anderer Codes "behindern". Wenn waitms aufgerufen wird, macht der Controller nichts anderes bis eben die Zeit vorbei ist. Bei einem Interrupt macht der Controller solange irgendwas bis eben nach einem Interrupt an die entsprechende Codestelle für den Interrupts gesprungen wird. Aber ich denke einen Großteil davon wurde bereits in den andern Tut's beschrieben :wink:


Noch eine kleine Anmerkung, "if" ist keine Schleife :wink:

Mach weiter so. Evtl. solltest du dir mal überlegen, ob du das ganze nicht ordentlich auf einer Homepage zusammenfasst.
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Mo, 15.01.07, 07:09

@Root Das ist korrekt. Die Beispiele die ich gezeigt habe, waren Software-PWMs.
Die Beispiele mit dem Pausen ist natürlich nicht ideal. Soll nur mal gezeigt gehen, wie ein ganz "Billiger PWM" geht. :wink:

Wie gesagt, es gibt viele Möglichkeiten PWM zu erzeugen.

Es gibt auch Hardware-PWM. Jedoch habe ich lange überlegt ob ich das reinschreiben soll oder nicht. Denn der Atmega8 verfügt nur über 2 Timer. Somit könnte man nur an zwei I/Os PWM erzeugen.

Da du es erwähnt, wäre ich noch kurz Hardware-PWM erwähnen. :wink:
Noch eine kleine Anmerkung, "if" ist keine Schleife
Ich weiß. :wink: Aber viele Leute nennen es auch IF-Schleife und ist ziemlich gängig. Ich habe es in den Jahren auch übernommen...
KB
Super-User
Super-User
Beiträge: 92
Registriert: Fr, 15.09.06, 21:37
Kontaktdaten:

Mo, 15.01.07, 18:28

Es würde auch ein Timer reichen um mehrere PWM Kanäle zu erzeugen.

Mit einem Timer Overflow Interrupt lässt man eine 8bit Variable hochzählen
und zusätzlich werden Die Variablen die denn PWM Wert beinhalten mit der ZählerVariable verglichen.
Wenn das ergebnis des Vergleiches Größer/Gleich ist wird ein entsprechendes Bit gesetzt.
und dann Ausgegeben.

Im Hauptprogramm kann man nun die PWM Variablen incrementiern / decrementieren und machen was man will

Wenn ich meinen ASM Code fürn RGB-Fader noch ein bissel angepasst hab kann ich ihn ja mal hier reinstellen da mache ich das nähmlich so ähnlich.
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Di, 16.01.07, 06:50

@KB Ja, wäre auch eine Möglichkeit. Wie gesagt, es gibt verschiedene Möglichkeiten PWM zu erzeugen. Na, dann freuen wir schon mal auf deinen Code. :wink:
monte310389
Mega-User
Mega-User
Beiträge: 433
Registriert: Mo, 15.05.06, 15:53
Kontaktdaten:

Fr, 19.01.07, 11:53

könne hier mal einer ein PWM reinschreiben also ein Code.
Der müste volgendes können. LEDS langsam an und aus Faden und das aber nur wenn Taster 1 dedrückt wird.
es reicht auch ein ausgang... ich komme mit den beispiel oben nicht klar
Benutzeravatar
Timm
Mega-User
Mega-User
Beiträge: 387
Registriert: So, 25.06.06, 18:53

So, 21.01.07, 18:48

monte310389 hat geschrieben:könne hier mal einer ein PWM reinschreiben also ein Code.
Der müste volgendes können. LEDS langsam an und aus Faden und das aber nur wenn Taster 1 dedrückt wird.
es reicht auch ein ausgang... ich komme mit den beispiel oben nicht klar
Ja das könnte ich auch mal gebrauchen :lol:
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Mo, 22.01.07, 21:52

Hier ein einfaches Beispiel (vermutlich nicht ganz optimal, es gibt zig Möglichkeiten es zu realisieren/programmieren :wink: war halt auf die Schnelle :wink: ). Jedoch müsst Ihr auf 8 Mhz hochdrehen bzw. den externen Quarz aktivieren. Da es mit 1 Mhz ruckelt. :lol: :

Code: Alles auswählen


$regfile = "m8def.dat"

$crystal = 8000000

Config Pind.5 = Output
Config Pind.6 = Output
'Config Pind.1 = Input
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input

Config Timer0 = Timer , Prescale = 1
On Ovf0 Ledsetzen

Enable Timer0
Enable Interrupts

Dim Zaehler As Byte
Dim Laenge As Byte
Dim A As Byte
Dim Umschalt As Boolean

Taster1 Alias Pind.2
Taster2 Alias Pind.3
Taster3 Alias Pind.4

Led1 Alias Portd.5
Led2 Alias Portd.6

Laenge = 255

Umschalt = 0

Do

If Taster1 = 1 Then

   If Umschalt = 1 Then

      For A = 0 To 254
         Laenge = Laenge + 1
         Waitms 20
         Next




   End If

   If Umschalt = 0 Then

      For A = 0 To 254
         Laenge = Laenge - 1
         Waitms 20
   Next



   End If

   Toggle Umschalt

End If


Loop

Ledsetzen:

Zaehler = Zaehler + 1
If Zaehler > Laenge Then Led1 = 1 Else Led1 = 0

Return




Andy
Hyper-User
Hyper-User
Beiträge: 1284
Registriert: Mi, 17.05.06, 13:03

Di, 30.01.07, 20:38

Hi Pehu...

Habe auch mal ein kleines Software PWM geschrieben...einen LED Fader (RGB Fader) habe nur ein kleines Problem.

Soweit funktioniert alles recht gut.

Nur werden die LED´s nicht wirklich Gefadet... kaum merkbare helligkeitsunterschiede beim Wechseln der Farben...und wenn die Farben wechseln oder anfangen zu Leuchten, dan BLINKEN die vorerst recht heftig, was das ganze Bild (den Fadereffekt) recht nervös aussehen lässt.
Kann man das eventuell etwas verbessern?
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Di, 30.01.07, 21:05

Hast du deinen µC auch mit 8 Mhz getaktet?

Ansonsten hätte ich für dich noch einen anderen Befehl zum Spielen. :wink:

Und zwar "Pulsout":

Syntax:

PULSEOUT PORT , PIN , PERIOD

Mit dem Period bestimmst du die Frequenz.

In der Bascom-Hilfe findest du auch noch eine Erklärung sowie Beispiel.

Hier ein Beispiel:

Code: Alles auswählen


$regfile = "m8def.dat"

$crystal = 1000000

Ddrb = &B111111

Config Portd.5 = Output                                     
                                         
Do

   Pulseout Portd , 5 , 5                                 

Loop    
                                         

Andy
Hyper-User
Hyper-User
Beiträge: 1284
Registriert: Mi, 17.05.06, 13:03

Di, 30.01.07, 22:07

Supi...werde ich dann mal bei gelegenheit ausprobieren...werde den Code aber dann auch noch mal Posten...dann kannst du dir ein besseres Bild von dem machen, was ich mir da so zusammengesponnen habe... :wink:
Benutzeravatar
Cool3000
User
User
Beiträge: 34
Registriert: Mi, 07.01.09, 22:09
Wohnort: Essingen

Mo, 23.02.09, 20:08

Tach,

Ja ich wei? das dieser Therd uhr alt ist :( aber ich hab keinen besseren Platz für meine Frage gefunden :P . Also da ich dabei bin auch eine Moodlight zu bauen hab ich auch ein Proggi geschrieben. Im moment sollte es einfach alle 3 HardwarePWMs des Mega8 auf und ab dimmen aber die Leds bleiben einfach dunkel :evil: woran liegt das :?: :?: Hier der Code:

Code: Alles auswählen

'Bascom ATmega32 RGB

$regfile = "m8def.dat"
$crystal = 8000000

Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output

Config Timer1 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Compare Pwm = Clear Down


Dim Rot As Integer
Dim Gruen As Integer
Dim Blau As Integer
Dim Rot1 As Byte
Dim Gruen1 As Byte
Dim Blau1 As Byte

Rot1 = 1
Gruen1 = 1
Blau1 = 1



1:
Do
 Pwm1a = Gruen
 Pwm1b = Blau
 Ocr2 = Rot

If Rot = 1024 Then
Rot1 = 0
End If

If Gruen = 1024 Then
Gruen1 = 0
End If

If Blau = 1024 Then
Blau1 = 0
End If



If Rot = 0 Then
Rot1 = 0
End If

If Gruen = 0 Then
Gruen1 = 1
End If

If Blau = 0 Then
Blau1 = 1
End If


If Rot1 = 0 Then
 Rot = Rot - 1
End If
If Rot1 = 1 Then
 Rot = Rot + 1
End If
If Rot1 = 2 Then
 Rot = Rot + 0
End If

If Gruen1 = 0 Then
 Gruen = Gruen - 1
End If
If Gruen1 = 1 Then
 Gruen = Gruen + 1
End If
If Gruen1 = 2 Then
 Gruen = Gruen + 0
End If


If Blau1 = 0 Then
Blau = Blau - 1
End If
If Blau1 = 1 Then
Blau = Blau + 1
End If
If Blau1 = 2 Then
Blau = Blau + 0
End If


Loop


End
Borax
Star-Admin
Star-Admin
Beiträge: 11987
Registriert: Mo, 10.09.07, 16:28

Mo, 23.02.09, 22:38

Vielleicht bin ich grade blind, aber ich finde keine
Enable Timer1
Enable Timer2
Statements in Deinem Code?
Benutzeravatar
Cool3000
User
User
Beiträge: 34
Registriert: Mi, 07.01.09, 22:09
Wohnort: Essingen

Di, 24.02.09, 01:10

Abend,
Ich dachte immer die seien unwichtig :?: ausserdem sobald ich die Enables reinschreib kommen nurnoch fehler??
Borax
Star-Admin
Star-Admin
Beiträge: 11987
Registriert: Mo, 10.09.07, 16:28

Di, 24.02.09, 12:21

kommen nurnoch fehler??
Wo, welche?
Benutzeravatar
Fightclub
Post-Hero
Post-Hero
Beiträge: 5114
Registriert: Mi, 01.03.06, 18:40

Di, 24.02.09, 16:32

Naja wenn Fehler kommen kann das manchmal schon besser sein als wenn garnix kommt und sich auch nix tut :D
Eine Übersicht über die Fehler wäre durchaus sinnvoll
Benutzeravatar
Cool3000
User
User
Beiträge: 34
Registriert: Mi, 07.01.09, 22:09
Wohnort: Essingen

Di, 24.02.09, 16:34

Code:
13.Enable Timer1
14.Enable Timer2

Fehler:
Error:85 Line:13 Unknow interrupt source [Count<>3]
Error:85 Line:13 Unknow interrupt source [Count<>3]
... (x13)
Error:85 Line:13 Unknow interrupt source [Count<>3]
Error:85 Line:13 Unknow interrupt source [Timer1]

Text: :)
Nehme ich das Enable Timer1 raus kommen die ganzen Fehler bei Enable Timer2
Benutzeravatar
Fightclub
Post-Hero
Post-Hero
Beiträge: 5114
Registriert: Mi, 01.03.06, 18:40

Di, 24.02.09, 17:29

Naja, ein syntaktisch korrektes Programm was aber semantisch falsch ist hilft dir genau so wenig :D
Mit den Fehlermeldungen kann ich leider nichts anfangen, da ich Bascom nicht wirklich oft benutze, allerdings habe ich die zuletzt schonmal gesehn =/ Vllt findet sich ja noch ein Bascom-Experte
Borax
Star-Admin
Star-Admin
Beiträge: 11987
Registriert: Mo, 10.09.07, 16:28

Mi, 25.02.09, 15:14

Probier mal:

Code: Alles auswählen

Enable Interrupts
Enable Timer1
Enable Timer2
Läuft bei mir fehlerlos durch den Compiler (ob der Code funktioniert, hab ich jetzt nicht geprüft)
Benutzeravatar
Cool3000
User
User
Beiträge: 34
Registriert: Mi, 07.01.09, 22:09
Wohnort: Essingen

Mi, 25.02.09, 18:24

Nee nee
kommen die gleichen fehler wie zuvor, aber könnte es an dem falschen 1. über Do liegen??
Borax
Star-Admin
Star-Admin
Beiträge: 11987
Registriert: Mo, 10.09.07, 16:28

Mi, 25.02.09, 22:46

Ich hab doch nur Deinen Code in Bascom kopiert, die Enable Statements eingefügt und den Compile-Knopf angeklickt. Geht!?

Hier noch mal 'vollständig':

Code: Alles auswählen

'Bascom ATmega32 RGB

$regfile = "m8def.dat"
$crystal = 8000000

Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output

Config Timer1 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Compare Pwm = Clear Down

Enable Interrupts
Enable Timer1
Enable Timer2

Dim Rot As Integer
Dim Gruen As Integer
Dim Blau As Integer
Dim Rot1 As Byte
Dim Gruen1 As Byte
Dim Blau1 As Byte

Rot1 = 1
Gruen1 = 1
Blau1 = 1



1:
Do
Pwm1a = Gruen
Pwm1b = Blau
Ocr2 = Rot

If Rot = 1024 Then
Rot1 = 0
End If

If Gruen = 1024 Then
Gruen1 = 0
End If

If Blau = 1024 Then
Blau1 = 0
End If



If Rot = 0 Then
Rot1 = 0
End If

If Gruen = 0 Then
Gruen1 = 1
End If

If Blau = 0 Then
Blau1 = 1
End If


If Rot1 = 0 Then
Rot = Rot - 1
End If
If Rot1 = 1 Then
Rot = Rot + 1
End If
If Rot1 = 2 Then
Rot = Rot + 0
End If

If Gruen1 = 0 Then
Gruen = Gruen - 1
End If
If Gruen1 = 1 Then
Gruen = Gruen + 1
End If
If Gruen1 = 2 Then
Gruen = Gruen + 0
End If


If Blau1 = 0 Then
Blau = Blau - 1
End If
If Blau1 = 1 Then
Blau = Blau + 1
End If
If Blau1 = 2 Then
Blau = Blau + 0
End If


Loop


End
Wie gesagt, ist nur ein Compile-Test, ob der code irgendwas sinnvolles macht, hab ich nicht geprüft.
Welche Bascom Version hast Du?

Weil bei einem 'ähnlichen' Code hat wohl auch eine ältere Bascom Version 'gestreikt':
viewtopic.php?f=31&t=6483&

Siehe auch:
http://www.mikrocontroller.net/topic/93374
Benutzeravatar
Cool3000
User
User
Beiträge: 34
Registriert: Mi, 07.01.09, 22:09
Wohnort: Essingen

Do, 26.02.09, 09:27

Also, nachdem ich jetzt Bascom neuistalliert hab lässt sich der Code ohne fehler compiliren :P . Aber auf dem uc ändert sich immer noch nichts, die Leds bleiben dunkel :evil: :evil:
Borax
Star-Admin
Star-Admin
Beiträge: 11987
Registriert: Mo, 10.09.07, 16:28

Do, 26.02.09, 09:59

Na immerhin!
Wie gesagt, ist nur ein Compile-Test, ob der code irgendwas sinnvolles macht, hab ich nicht geprüft.
Probier doch mal ganz klassisch ein einfaches Bascom Beispiel nach Anleitung (mit nur einem Timer). Wenn das funktioniert, langsam weitermachen...

Siehe auch:
http://www.roboternetz.de/wissen/index. ... om_und_PWM

BTW: Die Enable - Befehle sind anscheinend wirklich obsolet. Bascom startet Timer schon nach einem Config Statement
Antworten