-         

Ergebnis 1 bis 6 von 6

Thema: Verzweifel : Attiny26 + Timer + PWM

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    11.07.2004
    Beiträge
    43

    Verzweifel : Attiny26 + Timer + PWM

    Anzeige

    Hallo,
    ich versuche jetzt schon verzweifelt seit 3 Tagen, den Attiny26 dazuzubewegen, ein PWM-Signal auszugeben.
    Habe hier im Forum auch schon diverse Beiträge dazu gelesen,
    werde aber irgendwie nicht schalu drauß.
    Entweder ich stelle mich wie ein Hund zum Eier legen oder

    Ich habe mal mein Prog. hierher gestellt, mit der bitte ob sich es vielleicht mal jemand anschauen kann.
    Was mache ich falsch, oder bin ich völlig auf dem Holzweg.
    Vielleicht kann mir ja auch jemand mal ein einfaches Prog. schreiben, das ganz einfach, ohne irgendwelchen Schnickschnack ein PWM-Signal an dem Port B.5 rausgibt.

    Bin für jede Hilfe dankbar.
    Mein nächster Schritt wäre dann Umstieg auf Atmega8.

    Code:
      '------------------------------------------------------------
    '                 ATTINY26 test file
    '------------------------------------------------------------
    $regfile = "at26def.dat"
    $crystal = 1000000
    
    Tccr1a = &B11110011
    Tccr1b = &B01000001
    Pllcsr = &B00000100
    Ocr1c = 127
    Config Pinb.5 = Output
    
    Dim I As Byte
    Do
    
    For I = 1 To 255
    Ocr1a = I
    Waitms 5
    Next I
    For I = 255 To 1 Step -1
    Ocr1a = I
    Waitms 5
    Next I
    Loop
    
    End
    Danke schon mal im vorraus
    Gruß hellraider

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    49
    Beiträge
    112
    Hallo,

    was aehnliches habe ich gerade mit einem ATmega8 zu Testzwecken zusammengebrutzelt:
    http://www.elektronik-web.de/pwm_test.jpg

    Allerdings habe ich hier noch einen Infrarotempfaenger (TSOP1136) mit aufs Board gebastelt (Stichwort RC5). Mit ner Standart TV-Fernbedienung schalte ich eine Gluehlampe mit der "1" ein und mit der "2" wieder aus. Mit der "4" wird heller gedimmt und mit der "5" dunkler.
    Auf PortB.0 wird hier das PWM-Signal erzeugt.
    Ich benutze da ein simples PWM-Beispiel mit einem 8Bit Timer aus dem Claus Kuehnel Buch von Seite 159.
    Da der Timer0 schon von der Infrarotgeschichte benutzt wird, habe ich hier den Timer 2 verwendet.

    Die kleine Gluehlampe (12V) wird ueber einen BD243 geschaltet, der ueber nen 1K direkt an PortB.0 haengt.

    Aus dem folgenden Code (ist sicherlich nicht optimal), musste Dir das wichtigste rausfischen.

    Code:
    $regfile = "m8def.dat"
    $crystal = 12000000
    Const True = 1
    Const False = 0
    Config Pinb.0 = Output
    Config Rc5 = Pinb.1
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.0 , Rs = Portd.1
    Config Lcd = 16 * 4
    Config Timer2 = Timer , Prescale = 64
    Ausgang Alias Portb.0
    On Timer2 Timer2_isr
    Dim Hi As Byte
    Dim Lo As Byte
    Dim Phase As Bit
    Dim Address As Byte , Command As Byte
    Dim A As Integer
    Lo = 1
    Phase = True
    Enable Timer2
    Enable Interrupts
    Initlcd
    Cursor Off
    Cls
    Locate 1 , 1
    Lcd "PWM-Test"
    Lo = 0
    Hi = 0
    A = 0
    
    Do
    
     Getrc5(address , Command)
     If Address <> 255 Then
      Command = Command And &B01111111
      Select Case Command
       Case 1 : A = 0
       Case 2 : A = 255
       Case 4 :
        A = A - 5
        If A <= 0 Then A = 0
       Case 5 :
        A = A + 5
        If A >= 255 Then A = 255
      End Select
      Lo = A
      Hi = 255 - Lo
      Locate 3 , 1
      Lcd A ; "    "
     End If
    Loop
    
    End
    
    Timer2_isr:
     If Phase = True Then
      Ausgang = 1
      Timer2 = Lo
      Phase = False
     Else
      Ausgang = 0
      Timer2 = Hi
      Phase = True
     End If
    Return
    Mit freundlichen Gruessen
    Digitali

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    11.07.2004
    Beiträge
    43
    Danke für die Info,
    aber leider nützt mir das nichts.
    Denn wie ich aus dem Forum rausgelesen habe, geht das mit dem Timer beim Attiny 26 nicht so einfach.
    Trotzdem Danke

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    ich hab mal versucht, Dein Programm mithilfe des Datenblattes nachvollziehen zu können.
    Schau mamal,
    Es wird PB5 auf Output gestellt, aber im Programm kommt das sonst nicht mehr weiter vor, also braucht man es eigentlich nicht.
    Die Taktquelle des Timers ist 64MHz, der Prescaler ist 1, als gehen die 64MHz so an den Timer.
    In TCCR1A wird eingestellt, das bei einem Comparematch die Ausgänge OCR1A und ORC1B gesetzt werden, die Pins sind aber nicht auf Ausgang gestellt. Der Ttimer zählt bis zum Wert von OCR1C (ist 127) fängt dann von 0 an.
    Da OCR1A & B nicht verändert werden, sind die 0, weiss nicht was das ergibt.

    So wie das ausschaut zählt sich der Timer einen ab, aber man hat nix davon

    Evtl. mal die Takquelle etwas langsamer auswählen, oder einen grösseren Prescaler, sodass man auf ein paar Hz kommt um etwas zu sehen, falls eine LED am Ausgang hängt.
    Die Register OCR1A oder B setzen, damit der Timer/Counter auch was zu zählen hat.
    Die richtigen Pins auf Ausgang stellen.

    Wenn die Taktquelle bei 64MHz bleibt, der Prescaler auf 16384 und ORC1x auf 255, könnte ein Takt von 15Hz rauskommen dann könnte man schon etwas erkennen am Ausgang. Es müsste aber noch auf Toggle umgestellt werden, da die LED sonst nur sehr kurz an, bzw. aus, geht (ca . 1 Takt lang).


    HTH


    PS:
    ja, ich hab keinen T26

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    1. Wenn ich mich recht entsinne müssen die OCx Pins schon als Ausgang konfiguriert sein damit da auch was rauskommt.
    2. Er wird nicht zählen können, wenn als Taktquelle zwar die PLL (64 MHz) ausgewählt ist, diese aber zugleich nicht aktiviert wurde. (Datenblatt S.75)
    3. OCR1C sollte mit 255 geladen werden, da dieses den Timer Overflow definiert.


    Mein Fazit: lade Pllcsr mal mit &B00000000, konfiguriere PB0 - PB3 als Ausgang und lade OCR1C mit 255. Dann könnte es vielleicht gehen (jedenfalls lese ich das so aus dem Datenblatt heraus).

    Grüße,
    Hanni
    Grundregeln des Forenpostings:
    1. Nutze niemals die Suchfunktion!
    2. Überprüfe niemals die Topics nach Ähnlichkeiten!
    3. Schreibe alles in hellgelb!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    10.06.2005
    Ort
    Buchbrunn
    Alter
    28
    Beiträge
    68
    Hallo,

    Das ganze hatten wir "neulich" schonmal. Und zwar hier: Klick

    Da gibts auch ein paar gute Beispielcodes die sollten eigentlich funzen


    Gruß Wolfgang

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •