- LiTime Speicher und Akkus         
Ergebnis 1 bis 3 von 3

Thema: PWM mit Atmega8

  1. #1

    PWM mit Atmega8

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich bin Neuling auf dem Gebiet der Mikrocontroller. Ich habe mir ein myavr Baord mit einem Atmega8 gekauft. Nun möchte ich ein PWM erzeugen. Also Lampe an/aus hat prima geklappt, nur bekomme ich das PWM-Signal einfach nicht hin.
    Ich habe mich jetzt knapp 3 Stunden eingelesen und rumprobiert, in Foren gesucht, aber nichts verwertbares gefunden.

    Ich programmiere mit Codevision in C. Mit Assembler hab ich nix am Hut. Das gleich vorneweg

    Ich habe mir nun mit dem Wizzard einen Code erzeugen lassen, welcher sich auch kompilieren lässt, nur leider tut sich nichts.

    Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V1.25.5 Evaluation
    Automatic Program Generator
    © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date    : 11.03.2008
    Author  : Freeware, for evaluation and non-commercial use only
    Company : 
    Comments: 
    
    
    Chip type           : ATmega8L
    Program type        : Application
    Clock frequency     : 3,686400 MHz
    Memory model        : Small
    External SRAM size  : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega8.h>  
    #include <io.h>
    
    // Timer 2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    // Place your code here
    
    }
    
    // Declare your global variables here
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x08;
    
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 3686,400 kHz
    // Mode: Fast PWM top=FFh
    // OC2 output: Non-Inverted PWM
    ASSR=0x00;
    TCCR2=0x69;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x40;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
          {
          // Place your code here
    
          };
    }
    Wo liegt hier mein Problem? Bisher habe ich nur Beispiele für andere Controller gefunden. Wenn ich die einfach einfüge geht das kompilieren logischerweise nicht.
    Ich hoffe mir kann jemand sagen was ich wo einfügen muss, dass ich meine LED dimmen kann.
    Später möchte ich dann ein Servo anschließen und das dann mit dem Poti nach links/rechts fahren lassen. Aber erstmal klein anfangen


    Vielen Dank
    Gruß Andreas

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo Andreas,

    willkommen im RN-Forum.

    Wenn du unbedingt PWM mit diesem Programm verwenden willst, müssen wir leider alle deine Parametrierungen überprüfen, was ziemlich aufwändig ist, weil dein Programmgenerator nicht die hier sonst üblichen bitweisen Registerwerte erzeugt sondern die Bytes als ganzes. Man müsste also alles "aufbröseln" und das dauert. Wenn du's aber eilig hast, dann klicke mal auf das Wort Servo hier im Beitrag und schau dir das Beispielprogramm im RN-Wissen an...

    Ich spiele seit einigen Monaten mit verschiedenen AVRs und Servos und habe meine Servos mit Zählschleifen, Verzögerungen oder Interrupts bewegt. PWM habe ich dazu noch nicht verwendet. Das hat zwei wesentliche Gründe: Jedes Servo belegt dabei einen Timer und man muss die PWM-Pins verwenden.

    Gruß

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

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    38
    Beiträge
    246
    Hi, was soll dein PWM Signal denn für einen Wert liefern?
    Da du OCR2 = 0 setzt, wirst du immer LOW am Ausgang haben.

    Schreib einfach mal OCR2 = 0x80;

    Dann sollte eine LED gedimmt leuchten.

    mfg
    zerush

    Edit: Für Servos ist diese Art von PWM Signal übrigens ungeeignet, da solltest du lieber Software PWM realisieren.. Außerdem hast du dann, wie mein Vorredner bereits erwähnte, freie Pinwahl.

Berechtigungen

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

LiTime Speicher und Akkus