-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Mega88 6x PWM konfigurieren?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627

    Mega88 6x PWM konfigurieren?

    Anzeige

    Hallo,

    ich benötige 4 PWM Kanäle und habe den Mega 88 (aber wenn ich schon frage möchte ich natürlich alle 6 Kanäle wissen )

    Datenblatt:
    PIN PWM

    5 OC2B
    11 OC0B
    12 OC0A
    15 OC1A
    16 OC1B
    17 OC2A

    so, nun das Programm: bei Timer2 sagt Bascom "Invalid Parameter..."

    Wer kann mir sagen was ich da eintragen muss?

    Vielen Dank, Tobias

    PS. hab schon einige Kombinationen durch:

    Compare A
    Compare PWM
    Compare OCR2A
    Compare OC2A

    Code:
    ...
    'Timer1 = 16 Bit = Spiegelmotore
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 256
    
    
    'Timer2 = 8 Bit = Laser2
    Config Timer0 = Pwm , Pwm = 8 , Compare Ocr2a Pwm = Clear Up , Compare Ocr2b Pwm = Clear Up , Prescale = 256
    Enable Interrupts
    
    ...
    
    Do
    Compare1a = Motor1
    Compare1b = Motor2
    Ocr2a = Motor3
    Ocr2b = Motor4
    
    LOOP
    ...

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Schau mal in der "m88def.dat" nach, oder im "Register Summary" im Datenblatt... Da stehen meist die Registernamen

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    Hallo,
    in der "m88def.dat" habe ich nichts gefunden...

    Im Datenblatt unter "Register Summary" sieht es nicht viel besser aus:
    Mir ist aufgefallen, dass ich im Datenblat nur Timer1 & Timer0 gefunden habe... Im Datenblatt steht aber auch, dass der MEGA88 6PWM Kanäle hat!

    Register Summary:
    (0x8B) OCR1BH Timer/Counter1 - Output Compare Register B High Byte 135
    (0x8A) OCR1BL Timer/Counter1 - Output Compare Register B Low Byte 135
    (0x89) OCR1AH Timer/Counter1 - Output Compare Register A High Byte 135
    (0x8 OCR1AL Timer/Counter1 - Output Compare Register A Low Byte 135

    (0x85) TCNT1H Timer/Counter1 - Counter Register High Byte 135
    (0x84) TCNT1L Timer/Counter1 - Counter Register Low Byte 135

    0x28 (0x4 OCR0B Timer/Counter0 Output Compare Register B
    0x27 (0x47) OCR0A Timer/Counter0 Output Compare Register A

    Kann jemand etwas damit anfangen?

    Tobias
    ...

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ich hab nochmal geschaut...
    http://www.ledhilfe.de/viewtopic.php...t=2639&start=0
    Laut dieser Seite hier soll es mit folgenden Namen gehen:
    Red_pwm1 Alias Ocr0a
    Red_pwm2 Alias Ocr0b
    Green_pwm1 Alias Ocr1al
    Green_pwm2 Alias Ocr1bl
    Blue_pwm1 Alias Ocr2a
    Blue_pwm2 Alias Ocr2b


    OC1 hat 16bit, daher wird das "L" - LOW-Register genutzt.
    Die Timer-Einstellungen macht der Kollege allerdings "zu Fuß" - kann ja sein, dass Bascom da nen Bug hat.
    Würde sagen du baust es 1:1 ein und ersetzt es dann mal durch passende Einstellungen in Bascom - und sagst uns was passiert

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    soooooooooo - fertig er funktioniert JUUhUUUUUUUUUUUUUUU

    @stefan_Z:
    \/
    DANKEE!!!
    der Link war sehr gut!!!!!


    Timer konfigurieren:
    man kann es einzelnd machen wie im Link oder viel kürzer so:
    Code:
    'Timer0 = 8 Bit
    Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
    
    'Timer1 = 16 Bit
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
    
    'Timer2 = 8 Bit
    Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
    
    Enable Interrupts
    bei den 8Bit Timern - hier Timer0 & Timer1 darf man NUR EINMAL GENERELL "Compare Pwm" angeben!!!! Damit konfiguriert man beide PWM-Kanäle!

    und so wird´s im aufgerufen:
    Code:
    Ocr0a = Test1  'Timer0
    Ocr0b = Test2  'Timer0
    
    Ocr1al = Motor1  'Timer1
    Ocr1bl = Motor2  'Timer1
    
    Ocr2a = Laser_rot  'Timer2
    Ocr2b = Laser_gruen  'Timer2

    Man kan bei Timer1 auch:

    Compare1a = Motor1
    Compare1b = Motor2

    nutzen - ABER das benötigt MEHR SPEICHER - keine Ahnung warum....


    Frage:

    Motor1 Alias Ocr0a

    als was wird "Motor1" deklariert? also Byte? Word?...

    in meinem bestimmten Fall benötige ich:
    Dim Motor1 As Word
    und mit ALIAS funktioniert es bei mir nicht richtig, weil ich einen String in die Variable Motor1 kopiere:

    Motor1 = Val(wert)


    Tobias
    ...

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    als was wird "Motor1" deklariert? also Byte? Word?...
    Als das, was die Original-Variable auch darstellt. In dem Fall ein Byte, da der AVR nur Byte-Register kennt.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    ach so - danke.

    ACHTUNG: wichtiger Nachtrag zu Timer1:
    ich hatte geschrieben, das man wahlweise

    Ocr1al = Motor1
    Ocr1bl = Motor2

    Compare1a = Motor1
    Compare1b = Motor2

    schreiben kann! Das ist so wohl nicht ganz richtig, wie ich festgestellt habe:

    Die folgende Deklaration benötigt weniger Speicher, bekommt aber bei 10 Bit starke Probleme:
    Ocr1al = Motor1
    Ocr1bl = Motor2

    Die folgende Deklaration benötigt mehr Speicher, läuft aber auch noch mit 10 Bit:
    Compare1a = Motor1
    Compare1b = Motor2


    Kann mir einer sagen wo der Unterschied ist und warum es so ist?

    Tobias
    ...

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    OCR1AL ist nur das LOW-Byte vom Register - COMPARE1A sind die vollen 16-Bit

    Kann man im Simulator auch schön beobachten!

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    aha - vielen Dank.

    irgendwie habe ich da einen Feler....
    ich habe alles mit dem Timer1 ausprobiert - also Hardwaremäßig.

    Aber Timer0 und Timer2 funktionieren nicht...

    Code:
    'Konfiguration µC:
    $regfile = "m88def.dat"                                     'AT-Mega88
    $crystal = 20000000                                         'Quarz: 14,7456 MHz - Quarz auf Platine
    $baud = 9600                                                'RS232 Baudrate definieren
    
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    
    
    'Ddrb = &B1111111                                            '1 Ausgang, 0 Eingang = Pin PB7-0
    'Ddrc = &B1111111                                            '1 Ausgang, 0 Eingang = Pin PC7-0
    'Ddrd = &B1111111                                            '1 Ausgang, 0 Eingang = Pin PD7-0
    
    
    'Portb = &B0000000                                           '1 = Pullup
    'Portc = &B0000000                                           '1 = Pullup
    'Portd = &B0000000                                           '1 = Pullup
    
    '-------------------------------------------------------------------------------
    'Timer:
    Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
    
    
    'Timer1 = 16 Bit = Spiegelmotore
    'Clear Down =>  0 = 0 PWM  / 1023 = max PWM
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
    
    
    'Timer2 = 8 Bit = Laser2
    Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 256
    
    
    Enable Interrupts
    
    
    
    
    Do
    
    
    
    Ocr0a = 125                                                 'Test1
    Ocr0b = 125                                                 'Test2
    
    Compare1a = 125                                             
    Compare1b = 125                                             
    
    Ocr2a = 125                                                 'Laser_rot
    Ocr2b = 125                                                 'Laser_gruen
    
    Loop
    ...

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    aha - vielen Dank.

    irgendwie habe ich da einen Feler....
    ich habe alles mit dem Timer1 ausprobiert - also Hardwaremäßig.

    Aber Timer0 und Timer2 funktionieren nicht...

    Code:
    'Konfiguration µC:
    $regfile = "m88def.dat"                                     'AT-Mega88
    $crystal = 20000000                                         'Quarz: 14,7456 MHz - Quarz auf Platine
    $baud = 9600                                                'RS232 Baudrate definieren
    
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    
    
    'Ddrb = &B1111111                                            '1 Ausgang, 0 Eingang = Pin PB7-0
    'Ddrc = &B1111111                                            '1 Ausgang, 0 Eingang = Pin PC7-0
    'Ddrd = &B1111111                                            '1 Ausgang, 0 Eingang = Pin PD7-0
    
    
    'Portb = &B0000000                                           '1 = Pullup
    'Portc = &B0000000                                           '1 = Pullup
    'Portd = &B0000000                                           '1 = Pullup
    
    '-------------------------------------------------------------------------------
    'Timer:
    Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
    
    
    'Timer1 = 16 Bit = Spiegelmotore
    'Clear Down =>  0 = 0 PWM  / 1023 = max PWM
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
    
    
    'Timer2 = 8 Bit = Laser2
    Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 256
    
    
    Enable Interrupts
    
    
    
    
    Do
    
    
    
    Ocr0a = 125                                                 'Test1
    Ocr0b = 125                                                 'Test2
    
    Compare1a = 125                                             
    Compare1b = 125                                             
    
    Ocr2a = 125                                                 'Laser_rot
    Ocr2b = 125                                                 'Laser_gruen
    
    Loop
    ...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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