- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: ATMega 2560 - PWM Frage

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    8

    ATMega 2560 - PWM Frage

    Hi leute,

    ich setze mit Bascom einen PWM wert, ganz normal.

    Code:
    Config Timer3 = Pwm , Pwm = 10 , Compare B Pwm = Clear Down , Compare C Pwm = Clear Down , Prescale = 1024
    
    Pwm3b = 255
    Waitms 1000
    Pwm3b = 512
    
    Print "PWM: " ; Pwm3b
    
    Waitms 1000
    Das kuriose ist nun, dass bei den werten 256, 512 und 768 immer 256 abgezogen werden. Also 256 ist dann 0, 512 ist 256 und 768 ist 512.
    Alle anderen werte werden richtig eingestellt.

    Wie kann das sein und womit hat das zu tun?

    Das ganze ist nicht wirklich kritisch, aber es wäre mal interessant zu wissen, woran das liegt.

    Vielen dank für eure antworten, grüße,
    Fallback

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hallo,

    ich verstehe deine Frage nicht so ganz? Wo werden den immer diese 256 abgezogen? In den Registern des Timers? Erklär das doch nochmal ein bisschen genauer, damit man sichs leichter vorstellen kann. Und es wäre nicht schlecht, wenn du das ganze Programm posten würdest

    Gruß
    Chris

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    8
    Hi,

    wenn ich Print Pwm3b mache, dann sehe ich diesen Pwm3b wert. Und da steht dann statt "256" "0".
    Oder anders:

    Code:
    For I = 0 to 1023
    
        Pwm3b = I
    
    Next I
    
    Print "PWM: " ; Pwm3b
    Ein auschnitt der ausgabe sieht dann wie folgt aus:
    Code:
    PWM: 254
    PWM: 255
    PWM: 0
    PWM: 257
    PWM: 258
    Lustig, was?

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Sollte das Print nicht in der Schleife sein? Wie sind Pwm3b und I definiert? Das erinnert mich irgendwie an solche Probleme:

    Disable Interrupts
    Pwm3b = I
    Enable Interrupts

    Wird I oder Pwm3b in einer ISR verwendet/geändert?

    Wird I richtig ausgegeben?

    Print "PWM: " ; Pwm3b ; " I: " ; I

    [Edit]
    Ach, das war wohl nichts, Pwm3b ist ja das Ocr3b-Register, oder?
    Geändert von radbruch (31.08.2011 um 13:33 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.05.2010
    Beiträge
    8
    Hups, ja, sorry, das Print steht natürlich in der schleife.

    Aber es geht wie gesagt um die ausgabe .. wieso wird Pwm3b auf einmal 0?

    Ok, dann hier mal ein komplettes programm:

    Code:
    $regfile = "m2560def.dat"
    $crystal = 16000000
    $hwstack = 60
    $swstack = 60
    $framesize = 40
    $baud = 9600
    
    Dim I As Integer
    
    Config Timer3 = Pwm , Pwm = 10 , Compare B Pwm = Clear Down , Compare C Pwm = Clear Down , Prescale = 1024
    
    Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    
    Do
    
       For I = 0 To 1023
    
          Pwm3b = I
          Print "I: " ; I
          Print "pwm3b :" ; Pwm3b
    
       Next I
    
       Waitms 1000
    
    Loop
    [edit]
    I wird korrekt ausgegeben, ja.
    Und Pwm3b ist meines Wissens nach Ocr3b und hat dann übrigens den gleichen wert wie Pwm3b, gerade mal kurz getestet.
    Geändert von Fallback (31.08.2011 um 13:54 Uhr)

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Haste das mal ausprobiert:
    Code:
          Disable Timer3
          Pwm3b = I
          Enable Timer3
          Print "I: " ; I;
          Print " pwm3b: " ; Pwm3b
    Ich vermute, es klemmt beim Schreiben ins Pwm3b-Register. Vielleicht versuchst du es mal byteweise:

    Ocr3bh = I \ 256
    Ocr3bl = I Mod 256

    Erst High- dann Lowbyte
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. ATmega 2560 Bord
    Von rolber im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 5
    Letzter Beitrag: 06.06.2010, 10:24
  2. ATMEGA 2560 löten?
    Von kaktus im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 21.10.2008, 18:50
  3. bascom 1.11.8.7 /ATMEGA 2560 / Timer4+5
    Von wuppi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 05.07.2008, 20:59
  4. Atmega 2560 mit USB-ISP-Dongel programmieren
    Von sebriko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 28.01.2008, 15:17
  5. ATMega 2560
    Von Killer im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 18.08.2007, 12:58

Berechtigungen

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

12V Akku bauen