-         

Ergebnis 1 bis 6 von 6

Thema: 16-Bit PWm mit ATMega 32

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2005
    Beiträge
    18

    16-Bit PWm mit ATMega 32

    Anzeige

    Hallo,

    ich möchte gerne mit dem ATMega32 ein 16-Bit-PWM Signal ausgeben und das Ganze gerne in Bascom.

    Da Bascom aber anscheinend nur 8,9,10 Bit mit dem Timer1 zulässt muss ich wohl die Register von Hand setzen.

    Im Datenblatt auf Seite 99 steht dann das ich ICR1 oder OCR1a auf Max setzen soll. Nun meine Fragen :

    geht das dann mit

    OCR1a = &HFF ??

    und wie stelle ich dann das Puls/Pausenverhältnis ein ?

    Mit 8 oder auch 10Bit und den Bascom Standard-Befehlen läuft mein Programm problemlos, erzeugt auch einen schönen Sinus per PWM, allerdings reicht mir da leider die Auflösung nicht.

    Die Suche hier im Forum und bei Google hat mir leider nicht geholfen.

    Ich hoffe mir kann da jemand helfen. Vielen Dank schon mal im Vorraus.

    Gruß Markus

  2. #2
    @Markus
    hast du eine Lösung gefunden? ich Suche auch...

    LG Jan

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2005
    Beiträge
    18
    Hi Jan,

    16bit habe ich nicht hinbekommen. Zumindest nicht mit 20kHz. Ich habe dann mit folgenden Einstellungen immerhin 13bit geschafft.

    Code:
    Enable Timer0
    Enable Interrupts
    Start Timer0
    
    'Tccr1a = &B11000000
    Set Tccr1a.7                                                'COM1A1
    Set Tccr1a.6                                                'COM1A0
    Reset Tccr1a.5                                              'COM1B1
    Reset Tccr1a.4                                              'COM1B0
    Reset Tccr1a.3                                              'FOC1A
    Reset Tccr1a.2                                              'FOC1B
    Set Tccr1a.1                                                'WGM11
    Reset Tccr1a.0                                              'WGM10
    
    'Tccr1b = &B00010000
    Reset Tccr1b.7                                              'ICNC1
    Reset Tccr1b.6                                              'ICES1
    Reset Tccr1b.5                                              'obsolete
    Set Tccr1b.4                                                'WGM13
    Set Tccr1b.3                                                'WGM12
    Reset Tccr1b.2                                              'CS12
    Reset Tccr1b.1                                              'CS11
    Reset Tccr1b.0                                              'CS10
    
    Icr1h = &B00011111                                          '13 Bit Auflösung setzen
    Icr1l = &B11111111
    
    Set Tccr1b.0                                                'Timer an, kein Prescaler
    Mehr war leider nicht drin, aber vieleicht schaffst Du es ja, wenn Du sonst nicht viel erledigen musst. Eingestellt wird einfach nur mit Icr1H und L.

    Gruß Markus

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.07.2006
    Alter
    87
    Beiträge
    627
    tja und warum nicht software PWM? eventuell 2. µC?

    Tobias
    ...

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Na ja - wenn man ein PWM-Signal mit einer Frequenz von 20 kHz und einer Auflösung von 16 bit erzeugen möchte, bräuchte man selbst im Fast-PWM-Modus eine Taktfrequenz von lustigen 1,31 GHz (20.000 * 2^16...). Das dürfte hier wohl der limitierende Faktor sein - aber prinzipiell geht 16bit-PWM sehr gut, wenn man die entsprechenden Register direkt setzt.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    31.03.2009
    Beiträge
    17

    Hier mal ein Beispielcode für den Tiny 2313 - geht aber auch mit den "dickeren"

    Code:
    'Mac_Dimm
    'Laesst eine LED an PB4 ein- und ausatmen
    'Arne Groh
    '2011-06-20
    '
    'Fusebits
    '1111 1111
    '1111 1111
    '1101 1111
    '1110 0100
    
    $regfile = "attiny2313.dat"
    $crystal = 8e6
    
    Dim I As Byte
    Dim Ocr1b As Word
    
    'Fast PWM-Mode 15 einstellen
    Tccr1a = &B1010_0011
    Tccr1b = &B0001_1001
    
    'niedrigste Frequenz einstellen (damit man das PWM voll ausreizen kann)
    Ocr1ah = &HFF : Ocr1al = &HFF
    
    'OC1B als Output (PB4)
    Set Ddrb.4
    
    'Globale Interrupts aktivieren
    Set Sreg.7
    
    
    
    Do
    
    'Einatmen
    For I = 0 To 255 Step 1
    Ocr1b = Lookup(i , Fade256)
    'Tastverhaeltniss einstellen
    Ocr1bh = High(ocr1b) : Ocr1bl = Ocr1b
    Waitms 13
    Next I
    
    'Verharren
    Waitms 150
    
    'Ausatmen
    For I = 255 To 0 Step -1
    Ocr1b = Lookup(i , Fade256)
    'Tastverhaeltniss einstellen
    Ocr1bh = High(ocr1b) : Ocr1bl = Ocr1b
    Waitms 8
    Next I
    
    'Verharren
    Waitms 400
    
    loop
    
    
    '--------------------PWM DATA----------------------------
    
    '(
    Fade64:
    Data 0% , 1% , 1% , 1% , 2% , 2% , 3% , 3%
    Data 4% , 5% , 6% , 7% , 8% , 10% , 12% , 14%
    Data 17% , 20% , 24% , 28% , 34% , 40% , 48% , 57%
    Data 68% , 82% , 97% , 116% , 138% , 165% , 197% , 234%
    Data 280% , 333% , 398% , 474% , 565% , 674% , 804% , 959%
    Data 1143% , 1363% , 1625% , 1938% , 2311% , 2756% , 3287% , 3920%
    Data 4674% , 5574% , 6647% , 7926% , 9452% , 11271% , 13440% , 16027%
    Data 19112% , 22791% , 27178% , 32409% , 38648% , 46087% , 54958% , 65535%
    ')
    
    Fade256:
    Data 0% , 1% , 1% , 1% , 1% , 1% , 1% , 1% , 1% , 1% , 2% , 2% , 2% , 2% , 2% , 2%
    Data 2% , 2% , 2% , 2% , 2% , 2% , 3% , 3% , 3% , 3% , 3% , 3% , 3% , 4% , 4% , 4%
    Data 4% , 4% , 4% , 5% , 5% , 5% , 5% , 5% , 6% , 6% , 6% , 6% , 7% , 7% , 7% , 8%
    Data 8% , 8% , 9% , 9% , 10% , 10% , 10% , 11% , 11% , 12% , 12% , 13% , 14% , 14% , 15% , 15%
    Data 16% , 17% , 18% , 18% , 19% , 20% , 21% , 22% , 23% , 24% , 25% , 26% , 27% , 28% , 30% , 31%
    Data 32% , 34% , 35% , 37% , 39% , 40% , 42% , 44% , 46% , 48% , 50% , 52% , 55% , 57% , 60% , 62%
    Data 65% , 68% , 71% , 74% , 77% , 81% , 84% , 88% , 92% , 96% , 100% , 105% , 110% , 115% , 120% , 125%
    Data 130% , 136% , 142% , 149% , 155% , 162% , 169% , 177% , 185% , 193% , 202% , 210% , 220% , 230% , 240% , 250%
    Data 262% , 273% , 285% , 298% , 311% , 325% , 340% , 355% , 371% , 387% , 404% , 422% , 441% , 461% , 481% , 502%
    Data 525% , 548% , 572% , 598% , 624% , 652% , 681% , 711% , 743% , 776% , 811% , 847% , 884% , 924% , 965% , 1007%
    Data 1052% , 1099% , 1148% , 1199% , 1252% , 1308% , 1366% , 1427% , 1490% , 1556% , 1625% , 1698% , 1773% , 1852% , 1934% , 2020%
    Data 2110% , 2204% , 2302% , 2404% , 2511% , 2623% , 2739% , 2861% , 2988% , 3121% , 3260% , 3405% , 3556% , 3714% , 3879% , 4052%
    Data 4232% , 4420% , 4616% , 4822% , 5036% , 5260% , 5494% , 5738% , 5993% , 6259% , 6537% , 6828% , 7132% , 7449% , 7780% , 8125%
    Data 8487% , 8864% , 9258% , 9669% , 10099% , 10548% , 11017% , 11507% , 12018% , 12552% , 13110% , 13693% , 14302% , 14938% , 15602% , 16295%
    Data 17020% , 17776% , 18566% , 19392% , 20253% , 21154% , 22094% , 23076% , 24102% , 25173% , 26292% , 27461% , 28682% , 29957% , 31288% , 32679%
    Data 34132% , 35649% , 37234% , 38889% , 40617% , 42423% , 44308% , 46278% , 48335% , 50484% , 52728% , 55072% , 57520% , 60076% , 62747% , 65535%

Berechtigungen

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