Forum: Mikrocontroller und Digitale Elektronik Mit ATmega8 funktioniert aber mit AT90PWM3B nicht!


von Kaveh (Gast)


Lesenswert?

Hallo Zusammen,
ich hoffe, ich kann euch mein Problemm, mit dem ich seit heutemorgen 
zukämpfen habe, anschaulich beschreiben.
Also ich habe zwei Controller ein Atmega8 und ein AT90pwm3B + ein 
Pwm-Programm geschrieben in Sprache C (siehe unten).
dieses Programm läuft wunderbar auf ATmega8. Der Avr-Studio erzeugt 
davon ein HEX-file und das wird in den ATmega8 übertragen.
Die gleiche Vorgehenweise funktioniert mit dem anderen Cotroller nämlich 
mit AT90PWM3B nicht. AVR-Studio meldet keinen Fehler aber einen Haufen 
Warnung.
es wird kein HEX-File erzeugt und ich kann das programm in AVR-Studio 
nicht simulieren. Im Menu Debug ist bei Toggel Breakpunkt einen roten 
punkts zusehen.den kann ich zwar wegmachen aber der taucht immer wieder 
auf.
Vielleicht kann jemand mich auf den Fehler, den ich leider bis jetzt 
nicht gefunden habe, aufmerksam machen.
ich danke euch
mfg
kaveh

das programm unten für AT90pwm3B. die erste Bibliotheken nämlich 
<avr/io.h> und <stdint.H> habe ich für ATmega8 verwendet und es kamm 
keine fehlermeldung.

#include <avr/io.h>
#include <stdint.h>
#include"mcu.h"
#include"compiler.h"
#include"adc_drv.h"
#include"amplifier_drv.h"
#include"comparator_drv.h"
// Analog/Digital Wandler initialisieren
void adc_init(void)
{
        // externe Referenzspannung und AD-Wandlerkanal 9 (ADC9 / PC5) 
auswählen
        ADMUX = 0;

        // AD-Wandler einschalten und Prescaler = 64 einstellen 
(enstpricht 115 khz Wandlertakt)
        ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);
}

// Timer einstellen
void timer_init(void)
{
   // OC1A auf Ausgang
  DDRD = (1 << PD2 );

  // Was die einzelnen Einstellungen genau bedeuten steht im Datenblatt
  //
  // Timer 1 einstellen
        //
        // Modus 14: Fast PWM, Top von ICR1
        //
        // >> WGM13    WGM12   WGM11    WGM10
        //       1        1       1        0
        //
        // Timer Vorteiler: 1
  //
        // >> CS12     CS11    CS10
        //      0        0       1
        //
        //  Steuerung des Ausgangsport: Set at BOTTOM, Clear at match
  //
        // >> COM1A1   COM1A0
        //      1        0

  TCCR1A = (1<<COM1A1) | (1<<WGM11);
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);

  // Den Endwert (TOP) für den Zähler setzen
   // Der Zähler zählt bis zu diesem Wert
  // Hier kann man unter anderem die Frequenz der PWM einstellen
    ICR1 = 0x0080;

  // 0x0080 ist eine Abstufung mit 128 Stufen.
  // Problem: Wenn wir einen Motor mir PWM ansteuern vibrieren
  // seine Teile automatisch in der Frequenz mit.
  // Also legen wir diese in den nicht hörbaren Bereich.
  // 4MHz / 128 = 31250 Hz

}

int main()
{
  // 16bit Variable
    uint16_t buffer;

  // Timer für PWM initialisieren
  timer_init();

    // A/D - Wandler initialisieren
    adc_init();

  // OCR1A ist der Compare Wert
  // Wenn der Zähler diesen Wert erreicht, wird mit
  // obiger Konfiguration der OC1A Ausgang abgeschaltet
  // Sobald der Zähler wieder bei 0 startet, wird der
  // Ausgang wieder auf 1 gesetzt
  //
  // Durch Verändern dieses Wertes, werden die unterschiedlichen
  // PWM Werte eingestellt.

   // Startwert = 0. Wird in der while-Schleife gesetzt.
    OCR1A = 0x0000;


  while( 1 )
  {
  // Wandlung vom analogen Eingang starten
        ADCSRA |= (1<<ADSC);

        // Warten bis die AD-Wandlung abgeschloßen ist
        while ( !(ADCSRA & (1<<ADIF)) )
          ;

        // AD-Wert auslesen.
        // ADCH muss als zweites gelesen werden, da nachdem ADCL gelesen 
wurde
        // das ADC-Register gesperrt ist bis ADCH auch ausgelesen wurde.
        // buffer = ADCL | (ADCH<<8);

        // Oder einfacher.
        buffer = ADC;

  // Da die PWM eine Auflösung von 8bit hat aber der buffer 10bit gross 
ist
  // müssen wir noch transformieren

  OCR1A = (buffer>>3);
   }
}

die Warnmeldungen:alles mit einem gelben punkt versehen
../mcu.h:430:1: warning: "/*" within comment
../mcu.h:461:1: warning: "PC7" redefined
In file included from 
c:/winavr-20100110/lib/gcc/../../avr/include/avr/io.h:408, 
from ../PWMAT90PWM3B.c:1:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/portpins.h:202:1: 
warning: this is the location of the previous definition
../mcu.h:462:1: warning: "PC6" redefined
.
.
.
.
.
.
.
.
c:/winavr-20100110/lib/gcc/../../avr/include/avr/sfr_defs.h:234:1: 
warning: this is the location of the previous definition

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.