Error Arduino Uno 328P im AVR-Studio


hallo alle zusammen!

ich bekomme immer beim "builden" diesen error

../sinus_pwm.c:163:1: error: expected declaration or statement @ end of input

wäre sehr dankbar, wenn mir wer von euch helfen könnte ! :)

danke, christoph!

hier der code:



/*
 *  pulsweitenmodulation
 *
 *  pwm  atmega328p im fast-pwm mode
 *  mit timer/counter1
 *
 *  ausgabe eines dreieck-signales
 *
 *
 *
 *  htl st.pölten
 *
 */

#ifndef f_cpu
#define f_cpu   16e6
#endif

#define teiler    250
#define pi       3.1415926536


#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include <math.h>

volatile uint8_t lowbyte, highbyte; // low- und high-byte von adc
volatile uint16_t adc_ergebnis;     // variable für das adc-ergebnis
volatile float rechenwert;          // normierter wert im programm {-1...+1}
volatile float amp;               //amplitudenvariable

//----------------------------------------------------------------------------------------------
 
 // interrupt-routine zum adc auslesen
isr(adc_vect)



adc_ergebnis = adcw;
lowbyte =  adcl;
highbyte = adch;
 
}
 
 
  // interrupt service-routine:
isr(timer1_compa_vect) {


static float u1,t;      // spg., zeit

   
    t += 0.001;            

    if (t >= 0.1) t=0;
   
     if(t<0.03){
      u1=((4/0.03)*t*51)*amp;
    

     if(t>0.03){
      u1=(4-(4/0.075*(t-0.03))*51)*amp;
     }
 
   
   
     ocr1b = u1; // zeitdauer entspricht höhe der spannung
    portd = u1; // ausgabe auf portd (r2r-network) zur messung (vergleich mit pwm-signal)
     
}

int main()
{   
   
   // adc initialisierung:

    // adcsra-regsiter:
    // ad control , status register a.
    // in diesem register stellen wir ein, wie wir den adc verwenden werden

    // es wird u.a. der adc-takt eingestellt:
    // der resultierende takt sollte beim avr zwischen 50khz und 200khz liegen
   // -> bei 16mhz ist der teilungsfaktor zwischen 80 und 320
    // den adc aktivieren und teilungsfaktor auf 128 stellen
 
    adcsra  = (1<<aden);                            // adc aktivieren
   adcsra |= (1<<adps2) | (1<<adps1) | (1<<adps0); // teilungsfaktor festlegen
    adcsra |= (1<<adate);                           // freerun-mode wählen
   adcsra |= (1<<adie);                            // adc conversion complete interrupt aktivieren
   adcsra |= (1<<adsc);                            // start der messung, im freerun-mode nur 1x
   
   // admux-regsiter:
    // mit diesem register werden der zu messende kanal
   // und die referenzspannung ausgewählt.

   // voltage reference selection:avcc als referenz benutzen
    // refs0: avcc reference
   // result presented left adjusted setting adlar bit in admux
    // adlar: adc left adjust result

   admux = (1<<refs0) | (1<<adlar);
   
//----------------------------------------------------------------------------------------------   
   
   // digital io-initialisierung:
     
        ddrd  = 0xff      ;         // alle bit portd als ausgang (zum messen)       
           
       ddrb |= (1<<pb2);           // oc1b ist pwm ausgang, ist der gleiche pin wie pb2 (pin16)
                                   // muss als ausgang konfiguriert werden

//----------------------------------------------------------------------------------------------

   /*
     * das setzen von cs10 (clock-selekt) setzt den timer ohne  prescaler (max. geschwindigkeit).
     * das setzen von cs11 (clock-selekt) setzt den timer auf cpu-takt/8 = 16mhz/8 -> t=0.5µs.
    * das setzen von cs10 und cs11 setzt den timer auf cpu-takt/64 = 16mhz/64 -> t=4µs.
     *
     * wgnm: mode 15 selektiert: fast pwm, top = ocr1a;
    */

      tccr1a  = _bv(com1b1) | _bv(wgm11)| _bv(wgm10);
        tccr1b |= _bv(cs10)   | _bv(cs11) | _bv(wgm12) | _bv(wgm13);

    // timsk1: timer/counter1 interrupt mask register
    // ocie1a: timer/counter1 output compare match interrupt
 
      timsk1 = (1<<ocie1a);
      ocr1a  = teiler;
      
      //ocr1a  = 125;
    // output compare register -> 4µs * 250 = 1ms
   // anmerkung: weniger als 1ms wird mit simulation (proteus) problematisch

   /*
    *  in der isr wird der wert fuer das ocr1b-register veraendert
    *  (= vergleichswert zum umschalten für pwm).
    *  die konfigurationt (mit _bv(com1b1) siehe oben) gibt an, dass
    *  der generator den pin oc1b setzt, wenn der timer auf null ist (bottom) und
    *  und den pin zurücksetzt, sobald der er den wert im ocr1b register erreicht.
    *
    *  der wert im ocr1a ist der wert, bei dem der timer null gesetzt wird.
    *
    *  das verhältnis von ocr1b/ocr1a ist der prozentwert der zeit,
    *  fuer die der pin gesetzt ist.
    */

   //-----------------------------------------------------------------------

    sei(); // interrupt enable


   while (1)
   {   
   rechenwert = (float)adc_ergebnis/65472;   // adc-ergebnis skalieren
                               
     
      amp= rechenwert*255;   // ausgabe-variable skalieren
                             
   }
}

dass du hier im arduino forum bist, ist dir klar ?


irgendwo in der mitte deines sketch in isr(timer1_compa_vect)  fehlt ein  }
(oder ist eins zuviel, wahlweise)


Arduino Forum > International > Deutsch (Moderator: uwefed) > Error Arduino Uno 328P im AVR-Studio


arduino

Comments