- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: PWM mit 2313 und UP / Down Tastern

  1. #1
    Neuer Benutzer
    Registriert seit
    07.02.2008
    Ort
    atm Nürnberg
    Alter
    35
    Beiträge
    2

    PWM mit 2313 und UP / Down Tastern

    Anzeige

    Powerstation Test
    Hallo,

    Ich beschäftige mich noch nicht allzulange mit AVR´s und finds ganz interessant. Ich habe im net eine .doc Datei gefunden "AVR_HowTo.docx". Dort sind lektionen und bestimmte Dinge erklärt.

    Habe nun Folgen Code aus dem Tutorial und wollte diesen an einen Tiny2313 anpassen.

    Code:
    $regfile = "8535def.dat"
    $crystal = 4000000
    
    config portb = input
    portb.0 = 1                   'Pullup
    portb.1 = 1                   'Pullup
    
    
    config timer2 = PWM , PRESCALE = 1 , PWM = ON , COMPARE PWM = CLEAR UP
    OCr2 = 100                    'Anfangswert auf 100/256
    enable timer2
    
    do
           debounce Pinb.0 , 0 , Increment , sub
           debounce Pinb.1 , 0 , Decrement , sub
    loop
    
    sub increment
      if ocr2 < 246 then
          ocr2 = ocr2 + 10
      end if
    end sub
    
    sub decrement
      if ocr2 > 9 then
          ocr2 = ocr2 - 10
      end if
    end sub
    Hier der Klagliche versuch mit dem geänderten Code von mir.

    Code:
    $regfile = "2313def.dat"
    $crystal = 8000000
    
    config portb = input
    portb.0 = 1                   'Pullup
    portb.1 = 1                   'Pullup
    
    
    Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up ,
    Ocr1a = 100                                                 'Anfangswert auf 100/256
    Enable Timer1
    
    do
           debounce Pinb.0 , 0 , Increment , sub
           debounce Pinb.1 , 0 , Decrement , sub
    loop
    
    sub increment
      If Ocr1a < 246 Then
          Ocr1a = Ocr1a + 10
      end if
    end sub
    
    sub decrement
      If Ocr1a > 9 Then
          Ocr1a = Ocr1a - 10
      end if
    end sub
    Das mit den Subroutinen ist mir noch ein bischen schleierhaft und was der Compiler mit "Declare Sub"? meint? Dazu wollte ich das Register von "OCR2" auf "OCR1A" ändern, denn nur diesen ausganz will ich per Verändern.

    Vllt schaut sich jemand den Code an und kann mir vllt weiterhelfen?

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.03.2005
    Ort
    Bayern
    Alter
    55
    Beiträge
    14
    Hallo ThruMyEyez

    Ein Tip : Beispiele in Bascom ansehen

    mach das mal ohne Sub, ganz einfach z.B

    dim x as Byte
    x = 100

    do

    if Pinb.0 = 0 then
    if x > 0 then
    dec x
    Ocr1a = x
    end if
    end if

    if Pinb.1 = 0 then
    if x < 254 then
    incr x
    Ocr1a = x
    end if
    end if

    wait 1

    loop

    Mfg

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    Renkum
    Alter
    78
    Beiträge
    128
    Moin,

    Dabei ist es auch wichtig die 'Sub's' zu deklarieren. Das war in beide Beispiele nicht der Fall. Weiter funktioniert Pwm1a=x auch statt Ocr1a=x. Ich bin nicht sicher, vielleicht ist es besser x zu incrementieren statt Ocr1a bzw Pwm1a.

    Gruss,

    Edblum

  4. #4
    Neuer Benutzer
    Registriert seit
    07.02.2008
    Ort
    atm Nürnberg
    Alter
    35
    Beiträge
    2
    Also ich hab mal folgendes gemacht und es funktioniert!

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 20000000
    
    
    
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    
    Pwm1a = 100
    Pwm1b = 155
    
    Start Timer1
    
    
    Declare Sub Increment
    Declare Sub Decrement
    
    Do
           Debounce Pinb.0 , 0 , Increment , Sub
           Debounce Pinb.1 , 0 , Decrement , Sub
    Loop
    
    Sub Increment
      If Pwm1a < 254 Then
          Pwm1a = Pwm1a + 1
      End If
    End Sub
    
    Sub Decrement
      If Pwm1a > 1 Then
          Pwm1a = Pwm1a - 1
      End If
    End Sub
    Ich bekomme eine bei pwm1a eine schöne PWM mit 40%, allerdings funktionieren die taster nur auf dem Pollin board. Oô Sobald der Chip in die Schaltung kommt geht die PWM zwar aber die taster reagieren nicht, hab schon geguggt ob es da vllt nen kurzschluss gibt, was aber nicht der fall ist und fusebits sind CKSELL auf 1111 und SUT11.

    Allerdings hat er auf dem Pollinboard einen 8Mhz quarz und in der Schaltung 20Mhz, vllt liegt es daran.. oder ich tappe im Dunkeln denn im Datenblatt steht eig. das es bis 20Mhz gehen sollte.

    Vielen Dank für eure Antworten bis jetzt!

    EDIT: Ich hab vergessen den internen PullUp zu aktivieren, das war der grund weswegen es nicht geklappt hat, nun sind die Tasterpins auf High und werden gegen Masse gezogen was wunderbar klappt.

    Danke euch

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.07.2008
    Ort
    Renkum
    Alter
    78
    Beiträge
    128
    Moin,

    Weiterhin muss mann noch aufpassen, das beim Inkrementieren der PWM nicht mehr als 255 wird, da es dann wieder bei NULL anfangt. Dass habe ich bei meine Triebwagen (mit RC-5) erfahren, die nach "abschalten" plötzlich über die Bahn rasste.

    Also muss mann:

    Code:
    Sub Ab:
    If Motor > 250 Then
    Motor = 255
    Goto Halt
    Endif
    Motor = Motor + 3
    Halt:
    If Ribit = 1 Then
    Pwm1a = Motor                                               'umgekehrte Logik
    Else
    Pwm1b = Motor                                               'umgekehrte Logik
    End If
    End Sub
    Ich benütze eine H-Brücke, deswegen 'Ribit' für Richtungsinformation

    Viel Erfolg,

    Edblum

Berechtigungen

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

LiFePO4 Speicher Test