Forum: Mikrocontroller und Digitale Elektronik Probleme mit Ocr0a am Attiny2313


von Salllos (Gast)


Lesenswert?

Moin ich habe ein Problem mit dem Ocr0a an PB2 ich kann da keine Spannug 
messen :-( egal was ich drauf schreibe....Kann mir wer helfen?

Lars

CODE:
$regfile = "attiny2313.dat"
$crystal = 8000000

$hwstack = 32
$swstack = 10
$framesize = 40

Config Portb.0 = Input

Config Pinb.2 = Output                                      'Die 
PWM-Pins als Output definieren
Config Pinb.3 = Output                                      'Die 
PWM-Pins als Output definieren
Config Pinb.4 = Output                                      'Die 
PWM-Pins als Output definieren

'Die Timer auf PWM-Modus stellen
'Die PWM-Register haben eine Breite von 8 Bit - also Werte von 0 bis 255
'Wobei 0 = 0% Helligkeit und 255 = 100% Helligkeit bedeuten
Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear 
Down , Compare B Pwm = Clear Down
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear 
Down , Compare B Pwm = Clear Down

'Die Timer starten
Enable Timer0
Enable Timer1

'Interessanterweise MUSS man für OC2 Enable benutzen, sonst passiert 
nix!
Start Timer0
Start Timer1

'Die PWM-Register zuweisen
Led1 Alias Ocr1bl                                       'PWM-Pin 1 - Red
Led2 Alias Ocr1al                                       'PWM-Pin 2 - 
Green
Led3 Alias Ocr0a                                            'PWM-Pin 3 - 
Blau


'ein Paar Variablen Deklarieren
Dim Color_delay As Byte
Dim Color_stop As Byte
Dim Rgb As Byte
Dim W As Word
Dim Flanke As Bit
Dim Zaehler As Byte

'Startwert für die Schleife
Rgb = 0

'Farbwechsel Geschwindigkeit pro Schritt (empfohlen 1-15)  1=schnell 
15=langsam
Color_delay = 10

'Dauer der Pause bei der Grundfarbe (empfohlen 1-10)
Color_stop = 2

'Alles auf 0
Flanke = 0
Zaehler = 0

'Do.......loop
Do

'Messen der Zeit
Pulsein W , Pinb , 0 , 1

'Auswerten
If W <= 150 And Flanke = 0 Then
      If Zaehler >= 5 Then
         Zaehler = 0
      End If
   Flanke = 1
End If

If W >= 160 And W <= 200 And Flanke = 1 Then
   Incr Zaehler
   Flanke = 0
End If




Select Case Zaehler
   Case 1:
      Led1 = 255
      Led2 = 0
      Led3 = 0
   Case 2:
      Led1 = 0
      Led2 = 255
      Led3 = 0

   Case 3:
      Led1 = 0
      Led2 = 0
      Led3 = 255

   Case 4:
      Led1 = 255
      Led2 = 255
      Led3 = 255

   Case Else :
      Led1 = 0
      Led2 = 0
      Led3 = 0

End Select

Loop
End

von Hannes L. (hannes)


Lesenswert?

Vergiss "Config Timer...", das funktioniert nicht bei allen AVRs. Nimm 
lieber das Datenblatt, schau Dir die Timer-Register an und setze die 
darin befindlichen Bits durch stinknormale Zuweisungen. Bascom kennt die 
im Datenblatt verwendeten Namen der Register und ihrer Bits. Und mit der 
Anweisung "Bits" kannst Du auch sehr verständlichen (lesbaren) Code 
schreiben.

...

von MichiMüller (Gast)


Lesenswert?

Salllos schrieb:
> Config Timer0 = Pwm , Pwm = On , Prescale = 1 , Compare A Pwm = Clear
> Down , Compare B Pwm = Clear Down
> Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear
> Down , Compare B Pwm = Clear Down

Du hast das nicht zufällig von http://www.ledstyles.de/ftopic11776.html 
gemopst?

Was ist das denn für eine Auflösung für den Timer 1???

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.