Forum: Mikrocontroller und Digitale Elektronik Pwm + Rc5 = Attiny überfordert? (Bascom)


von Sven (Gast)


Lesenswert?

Guten Abend,

ich arbeite an einer Infrarotverbindung, um eine Led an und aus zu 
schalten.
Infrarotverbindung (Rc5) funktioniert perfekt!!!
Jetzt wollte ich die Led noch dimmen...
Aus irgendeinem Grund ist die Software Pwm zu langsam!
Desshalb: Hardware Pwm
ABER: Wenn ich die Led mit Pwm betreiben will kommen 4 Errormeldungen.

Mikrocontroller: Attiny25 - 20Pu
Programmiersprache: Bascom

Meine Frage:
-Wiso geht das nicht?^^
Ist der Tiny überfordert/hat zu wenig Timer
Laut datasheet hat er:
2 Timer (- braucht Interrupt für rc5, rc5 und Pwm je ein Timer???)

Programm:
1
$regfile = "attiny25.dat"
2
$framesize = 32
3
$swstack = 32
4
$hwstack = 32
5
$crystal = 8000000
6
7
8
'Pwm einstellen
9
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1       '
10
Dim I As Integer
11
12
'Rc5 einstellen
13
Config Rc5 = Pinb.3
14
Enable Interrupts
15
Dim Address As Byte , Command As Byte
16
17
Config Portb.1 = Output
18
19
20
'Variablendeklaration
21
Dim Blinken As Byte
22
23
24
25
'Hauptschleife
26
Do
27
  'Rc5 Daten reinholen
28
  Getrc5(address , Command)
29
30
  'Adresse Infrarotfernbedinung 20
31
  'Tasten: hoch:112 ; runter:113 ; Stop:53 ; rechts:32 ; links:33
32
33
  If Address = 20 Then
34
     If Command = 32 Then
35
      Compare1a = 20          '<-------------------Fehler
36
      'Portb.1 = 1
37
      'Pwm = 100
38
     Else
39
      Compare1a = 20          '<-------------------Fehler
40
      'Portb.1 = 0
41
      'Pwm = 10
42
     End If
43
     'Rc5 zurücksetzen
44
     Command = Command And &B01111111
45
46
  End If
47
48
49
Loop
50
End

Fehlermeldung:
Error:46 Line 39 Assignment error [COMPARE1A:0 20: 112] , in File .....
Error:46 Line 43 Assignment error [COMPARE1A:0 20: 112] , in File .....
Error:7 Line: 43 IF THEN expected [43] , in File .....
Error:123 Line: 43 End IF expected [43] , in File .....

(letztere beiden hängen mit den ersten beiden zusammen)

Ich habe das Programm von meinem Atmega88 auf einen Attiny25 übertragen, 
bis auf die Pwm geht alles.

Vielen Dank für Tipps und Lösungsvorschläge.

Mit freundlichen Grüßen

Sven

von GFrankie (Gast)


Lesenswert?

Compare1A ist Name für Interrupt. Versuch mal OCR1A = 20

von Sven (Gast)


Lesenswert?

Danke GFrankie,

Es gibt keine Fehler mehr.
Leider funkt das mit der Led iwie trotzdem nicht!?
Hast du noch weitere Ideen?

MFG

Sven

von GFrankie (Gast)


Lesenswert?

Keine Ahnung, da ich nicht weis, was da eigentlich passieren soll. 
Besser hinter jeder Programmzeile ein Remark, was für ein Sinn die haben 
soll.

Dimmen? An Aus schalten?
"Command = Command And &B01111111" ist toggle bit löschen und nicht RC5 
rücksetzen.

von Sven (Gast)


Lesenswert?

OK mach ich:

- ich will (einfach) die Helligkeit mit der Fernbedienung verändern
1
$regfile = "attiny25.dat"
2
$framesize = 32
3
$swstack = 32
4
$hwstack = 32
5
$crystal = 8000000
6
7
8
'Pwm einstellen
9
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1       '
10
11
'Rc5 einstellen
12
Config Rc5 = Pinb.3                    'Pinb.3 hier wird der IRsensor angeschlossen
13
Enable Interrupts                      'muss gemacht werden XD
14
Dim Address As Byte , Command As Byte  '2 Variablen werden für Rc5 gebraucht
15
16
17
18
'Hauptschleife
19
Do
20
  'Rc5 Daten reinholen -Adresse ist wegen der Fernbedinung notwendig
21
  'in dem Fall ist sie für die Radiosteuerung und hat als Adresse (20)
22
  'Command ist der Befehl, in dem Fall welche Taste gedrückt wird
23
  'Tasten stehen unten - ich nehme die Rechtstaste (32)
24
  Getrc5(address , Command)
25
26
  'Adresse Infrarotfernbedinung 20
27
  'Tasten: hoch:112 ; runter:113 ; Stop:53 ; rechts:32 ; links:33
28
29
  If Address = 20 Then                    'wenn es die richtige Fernbedinung ist 
30
     If Command = 32 Then                 'UND die richtige Adresse dann:
31
      Compare1a = 100                     'Led hell an      
32
     Else
33
      Compare1a = 20                      'sonst leicht an 
34
     End If
35
     'toggle bit löschen
36
     Command = Command And &B01111111
37
38
  End If
39
40
41
Loop
42
End

So ich hab mal alles vereinfacht und unnötiges weggelassen.

Danke für deine Hilfe^^

von GFrankie (Gast)


Lesenswert?

Hi, ich seh jetzt erst mal keinen direkten Fehler, außer das da wieder 
"Compare1a = 100", der Interrupt steht. Flüchtigkeitsfehler oder :-) Mir 
bereitet der Config Timer Befehl Kopfschmerzen. Da hab ich noch nie 
durchgeblickt und heute abend schaff ich das auch nicht mehr. Ich setz 
die Timerregister mit Hilfe des Datenblatts lieber direkt. Ich versuchs 
weiter aber nicht heute. Müßte ich selbs mal testen. Viel Erfolg.

von GFrankie (Gast)


Lesenswert?

Ah ja, RC5 verwendet Timer0 nach Bascom Hilfe. Timer1 für PWM ist also 
OK

von GFrankie (Gast)


Lesenswert?

Hab noch was gefunden: http://bascom-forum.de/index.php?topic=4004.0
Also anscheinend nicht das CONFIG TIMER für PWM nutzen sondern direkt.

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.