- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: RN-Control - PWM ich verstehe es nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Ort
    Kaarst
    Alter
    48
    Beiträge
    21

    RN-Control - PWM ich verstehe es nicht

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen!
    Ich Suche schon seit Tagen im INet und auch speziell hier im Forum nach Beispielen die mich verstehen lassen wie das funzt.
    Irgendwie finde ich da nichts was mich weiter bringt.
    Deshalb möchte ich hier mal meinen Speziellen Fall ansprechen:

    Ich habe die RN-Control mit dem Atmega32.
    Durch die DCF77 Steuerung fällt Timer1 raus (steht zumindest so in der Doku).
    Heißt doch das ich nur Timer0 nehmen kann, oder?
    Und Ports sollten PD4 und PD5 sein. Wobei PD4 B ist und PD5 A

    Ich möchte nun mit einem Ausgang die Led-Beleuchtung des Displays und mit dem anderen den Kontrast regeln.
    Kontrast ist erstmal zweitrangig!

    Also muß ich:
    1. Die Ports als Ausgang einrichten
    2. Den Timer0 als PWM mit predingsbums und so
    3. Werte raus geben
    oder sehe ich das falsch?


    Code:
    Config Pind.4 = Output
    Config Pind.5 = Output    
    Config Timer0 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    Pwm1a = 0
    Pwm1b = 0
    Da kommt nur leider immer invalid parameter

    Gültige Werte sind von 0 bis 255, richtig?


    Hilfe, bitte....
    Wenn ich das verstanden habe kanns wieder weiter gehen!
    Im mom hänge ich da total fest.
    Meine kleine HP
    Auf meiner HP werde ich versuchen meine Arbeiten zu dokumentieren!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo MueThoS,

    Timer0 und PWM gehen nicht zusammen.
    Du must Timer1 (OC1x) oder Timer2 (OC2) nehmen.

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Ort
    Kaarst
    Alter
    48
    Beiträge
    21
    Achsooo,
    hmmm.

    Wie gesagt Timer 1 fällt wohl aus oder?
    Weil der für die DCF77-Auswertung schon in Benutzung ist.

    Bleibt Timer2, richtig.
    Mit Timer2 kann ich aber nur einen PWM erzeugen. oder? (PD7)

    Böse Falle!

    Gibts alternativen?
    Meine kleine HP
    Auf meiner HP werde ich versuchen meine Arbeiten zu dokumentieren!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Gibts alternativen?
    Such 'mal nach "Software-PWM".

    Z.B. hier:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=38460

    Gruß Dirk

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Ort
    Kaarst
    Alter
    48
    Beiträge
    21
    Ok, habe mal ein wenig experimentier!

    Habe folgenden (gekürzten) Code:

    Code:
    ' PortD 1      PWM für Beleuchtung
    ' PortD 2      PWM für Kontrast
    
    ' Chip-Settings
    $regfile = "m32def.dat"
    $crystal = 16000000
    $hwstack = 128
    $swstack = 128
    $framesize = 128
    $baud = 19200
    
    Config Timer0 = Timer , Prescale = 256
    Dim Timercounter As Byte
    Config Portd.0 = Output
    Config Portd.1 = Output
    
                                                                 ' Zählvariable für die PWM
    On Timer0 Pwm_isr
    Enable Timer0                                               ' timer0 interrupt ein
    Enable Interrupts                                         ' Global Interrupt ein
    
    .....
    .....
    
    
    Pwm_isr:
     If Timercounter < Dimmer Then
        Set Portd.0
       Else
        Reset Portd.0
       End If
      If Timercounter < Kontrast Then
         Set Portd.1
        Else
         Reset Portd.1
        End If
      Timercounter = Timercounter + 1
      If Timercounter = 255 Then Timercounter = 0
    
      Return
    Grundlage ist ja die RN-Control mit dem 16mHz Quarz
    Nur habe ich irgendwie das gefühl das das nicht klappen wird.
    Ich habe Testweise 2 LEDs angeschlossen.
    Und entweder flackern die oder wenn ich den prescale runter setze scheint der rest meines Programms nicht mehr richtig zu laufen.

    Deshalb frage ich nochmal generell nach.
    An und für sich ist das so eine richtiger Software-PWM oder?
    Meine kleine HP
    Auf meiner HP werde ich versuchen meine Arbeiten zu dokumentieren!

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    also ich würde ja sagen diese Zeilen überschneiden sich in der Funktion, wobei die Erste Vorrang hat !

    Code:
    $baud = 19200
    ....
    Config Portd.0 = Output
    Config Portd.1 = Output
    Lass mal $baud weg, und stelle sicher, das kein Print im Programm vorkommt !

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Ort
    Kaarst
    Alter
    48
    Beiträge
    21
    Ups, das habe ich hier vergessen zu ändern!

    Mir ist beim überprüfen der Ports dann auch aufgefallen das diese ja für die Serielle Schnittstelle in Benutzung sind.
    Ich habe die Ports dann geändert auf D2 imd D3 aber ist das selbe Problem.
    Sobald ich auf sagen wir mal halben Wert gehe flackert es.

    Ich will jetzt nich sagen das ich mit zählen könnte aber es flackert schon extrem.
    Meine kleine HP
    Auf meiner HP werde ich versuchen meine Arbeiten zu dokumentieren!

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo MueThoS,
    An und für sich ist das so eine richtiger Software-PWM oder?
    Ja, das geht als Software-PWM durch, funktioniert aber so noch nicht ganz. In der ISR (Pwm_isr) würde ich die Ports nicht gezielt Setzen/Zurücksetzen, sondern Toggeln (Toggle Portd.x), wenn ein bestimmter Wert (Dimmer, Kontrast) erreicht ist. Der Sinn ist ja, dass der Port nicht in jeder ISR getoggelt wird, sondern nur in der Dimmer-tsten oder Kontrast-sten ISR. Wenn dann der Wert erreicht ist, muss der zugehörige Zähler auf 0 gesetzt werden. Letztlich braucht man dann auch 2 Zähler, die man getrennt voneinander in der ISR zurücksetzen kann.

    In der jetzigen Version kannst du die Zeile "If Timercounter = 255 Then Timercounter = 0" weglassen, weil bei 255 + 1 wieder 0 erreicht ist.

    Gruß Dirk

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Ort
    Kaarst
    Alter
    48
    Beiträge
    21
    Achsooo,

    Code:
    ' Timer0 für die PWM
    Config Timer0 = Timer , Prescale = 256
    Dim Dimmercounter As Byte                                   ' Zählvariable für die PWM Dimmer
    Dim Kontrastcounter As Byte                                 ' Zählvariable für die PWM Kontrast
    Config Portd.2 = Output
    Config Portd.3 = Output
    ....
    On Timer0 Pwm_isr
    Enable Timer0                                               ' timer0 interrupt ein
    Enable Interrupts                                           ' Global Interrupt ein
    ....
    ....
    Pwm_isr:
     If Dimmercounter = Dimmer Then
        Toggle Portd.2
        Dimmercounter = 0
      Else
        Dimmercounter = Dimmercounter + 1
      End If
      If Kontrastcounter = Kontrast Then
        Toggle Portd.3
        Kontrastcounter = 0
      Else
        Kontrastcounter = Kontrastcounter + 1
      End If
    
     Return
    Dann waähre es so richtig, oder?
    Was ich halt so komsich finde ist das das so garnicht funktioniert wie ich das will!
    Wenn ich es so mache wie jetzt hier in der Code-Box und stelle einen Wert auf 255 dann Blinkt diese Led ca im Sekundentakt (hab kein Ossi)
    Das würde aber doch heißen das er eine Sekunde braucht um bis 255 zu zählen, oder sehe ich das falsch.

    Und ich dächte das müßte er schneller können.
    Meine kleine HP
    Auf meiner HP werde ich versuchen meine Arbeiten zu dokumentieren!

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ... stelle einen Wert auf 255 dann Blinkt diese Led ca im Sekundentakt (hab kein Ossi)
    Der Vorteiler ist bei dir (16 MHz Takt, Prescaler 256) 62,5 kHz. Wenn in jeder 255. ISR getoggelt wird, dann passiert das ca. 245x pro Sekunde.

    Das dürfte nicht mehr zu sehen sein, d.h. die LED sieht man dann nicht blinken.

    Gruß Dirk

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen