hallo
ich möcht eine temperaturmessung über das twi modul von myavr machen und diese dann per twi an das mk2 weitergeben. danach möchte ich eine stufenweise steuerung der pwm geschwindigkeit anhand der temperatur durchführen. die temperatur muss ich noch über twi befehle einbinden jedoch hab ich hab bei meinem bisherigen code das problem dass mir zwei fehler angezeigt werden ich jedoch aber nicht weiß woran es liegt hab schon viel gegoogelt aber nichts gefunden. anbei mein programmcode und die beiden fehlermeldungen vielleicht kann mir ja jemand behilflich sein meine fehler zu finden.
Fehlermeldung 1: expected '(' before wert
Fehlermeldung 2: expected declaration or statement at end of input
Mir ist klar dass ich irgendwo entsprechende Zeichen gefunden habe aber ich habe bisher noch keine lösung für das problem gefunden
mfg
ich möcht eine temperaturmessung über das twi modul von myavr machen und diese dann per twi an das mk2 weitergeben. danach möchte ich eine stufenweise steuerung der pwm geschwindigkeit anhand der temperatur durchführen. die temperatur muss ich noch über twi befehle einbinden jedoch hab ich hab bei meinem bisherigen code das problem dass mir zwei fehler angezeigt werden ich jedoch aber nicht weiß woran es liegt hab schon viel gegoogelt aber nichts gefunden. anbei mein programmcode und die beiden fehlermeldungen vielleicht kann mir ja jemand behilflich sein meine fehler zu finden.
Code:
/***************************************************************************************/
/*PWM-Steuerung über Temperaturfühler LM75 eines Lüfters an PB1
und Sollwertanhebung über Poti an PC0*/
/***************************************************************************************/
/***************************************************************************************/
#define F_CPU 3686400 // Taktfrequenz des myAVR-Boards
#include <avr\io.h> // AVR Register und Konstantendefinitionen
#include <avr\interrupt.h> // Weitere Interruptdefinitionen
#include "lcd.h" // bindet die LCD Headerdatei ein
/***************************************************************************************/
/*******************************Variablen***********************************************/
int wert=0; // legt die Variable wert als int mit dem Wert 0 an
int i=0; // legt die Variable i als int mit dem Wert 0 an
float result = 0; // legt die Variable result als float mit dem Wert 0 an
int anhebung = 0; // legt die Variable anhebung als int mit dem Wert 0 an
float begrenzung = 0.5; // legt die Variable begrenzung als float mit dem Wert 0.5 an
float temperatur = 0; // legt die Variable temperatur als float mit dem Wert 0 an
int geschwindigkeit = 0; // legt die Variable geschwinigkeit als int mit dem Wert 0 an
int auslastung = 0;
/***************************************************************************************/
/*******************************Unterprogramme******************************************/
void Timer_init (){
TCCR1A = (1<<WGM11) | (1<<COM1A1) | (1<<COM1B1); // Fast-PWM Mode 14(ICR1); verknüpfung auf PB1 und RESET OC1B
TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS11); // Prescaler 8; FAST-PWM Mode 14(ICR1)
ICR1 = 0x1ff; // setzt Maximalwert des Timers (511)
}
void wandler_init (){
ADMUX |= (1<<REFS0); // auf interne Referenz schalten
ADCSRA |= (1<<ADEN); // Wandler einschalten
}
void wandlung (){
ADCSRA |= (1<<ADSC); // eine AD-Wandlung
while (ADCSRA & (1<<ADSC)) {;} // auf Abschluss der Konvertierung warten
result = ADCW; // AD Wandler muss einmal gelesen werden, sonst wird Ergebnis der nächsten Wandlung nicht übernommen.
result = 0; // Variable result wieder auf 0 setzen
for(i=0; i<4; i++) { // Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen hochzählen bis 4
ADCSRA |= (1<<ADSC); // eine Wandlung
while (ADCSRA & (1<<ADSC)) {;} // auf Abschluss der Konvertierung warten
result += ADCW; // Wandlungsergebnisse aufaddieren
}
result /= 4; // Summe durch vier teilen = arithm. Mittelwert
}
void ausgabeLcdauslastung(int auslastung1, int l){
static int auslastungold=0; //statischen integer erzeugen mit dem namen "wertold"
if (auslastungold!= auslastung1){ //Abfrage ob die alte Ausgabe gleich der neuen ist
lcd_clear(); //LCD löschen
char *str, buffer[10];
str= utoa(auslastung1, buffer, 10); //Umwandlung von int nach string
lcd_writeText(str,l); //wandlerwert ausgeben
auslastungold = auslastung1; //aktuelle Ausgabe in die Variable old überschreiben
lcd_goto(1,4); //Cursor-Sprung auf Zeile 1;Spalte4
lcd_writeText("% Auslastung",12); //Das Zeichenhette"% Auslastung" wird an der Cursor-Position ausgegeben
}
else {
auslastungold = auslastung1; //aktuelle Ausgabe in die Variable old überschreiben
}
void ausgabeLcdtemperatur(int temperatur1, int l){
static int temperaturold=0; //statischen integer erzeugen mit dem namen "wertold"
if (temperaturold!= temperatur1){ //Abfrage ob die alte Ausgabe gleich der neuen ist
lcd_clear(); //LCD löschen
char *str, buffer[10];
str= utoa(temperatur1, buffer, 10); //Umwandlung von int nach string
lcd_writeText(str,l); //wandlerwert ausgeben
temperaturold = temperatur1; //aktuelle Ausgabe in die Variable old überschreiben
lcd_goto(1,4); //Cursor-Sprung auf Zeile 1;Spalte4
lcd_writeText("°C",3); //Das Zeichenhette"% Auslastung" wird an der Cursor-Position ausgegeben
}
else {
temperaturold = temperatur1; //aktuelle Ausgabe in die Variable old überschreiben
}
}
/***************************************************************************************/
int main (void){
/*******************************Konfiguration*******************************************/
DDRB |= (1<<PB1) ; // PB1 als Ausgang den Rest als Eingang
DDRC |= (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4) | (1<<PC5) | (1<<PC6); // PC0 als Eingang den Rest als Ausgang
lcd_init(); // LCD initialisieren durch Unterprogrammaufruf
Timer_init(); // Timer initialisieren
wandler_init(); // AD-Wandler initilisieren
/***************************************************************************************/
while (1){
wandlung(); // ruft das Unterprogramm wandlung auf
ausgabeLcdtemperatur(temperatur,3); // ruft das Unterprogramm ausgabeLcdtemperatur auf und übergibt den Temperatur Wert
wert=(int)result; // impliziten Integer aus dem float result erstellen
if (wert>100<=200){ // überprüft ob die Variable größer 100 kleiner gleich 200 ist
anhebung = 20; // setzt die Variable anhebung auf den Wert 20
}
else if (wert>200<=400){ // überprüft ob die Variable größer 200 kleiner gleich 400 ist
anhebung = 30; // setzt die Variable anhebung auf den Wert 30
}
else if (wert>400<=600){ // überprüft ob die Variable größer 400 kleiner gleich 600 ist
anhebung = 40; // setzt die Variable anhebung auf den Wert 40
}
else if (wert>600<=800){ // überprüft ob die Variable größer 600 kleiner gleich 800 ist
anhebung = 50; // setzt die Variable anhebung auf den Wert 50
}
else if (wert > 800){ // überprüft ob die Variable größer 800ist
anhebung = 60; // setzt die Variable anhebung auf den Wert 60
}
if (temperatur<=5){ // überprüft ob die Variable kleiner gleich 5 ist
geschwindigkeit = 150; // setzt die Variable auf den Wert 150
}
else if (temperatur>5<=10){ // überprüft ob die Variable größer 5 und kleiner gleich 10 ist
geschwindigkeit = 250; // setzt die Variable auf den Wert 250
}
else if (temperatur>10<=15){ // überprüft ob die Variable größer 10 und kleiner gleich 15 ist
geschwindigkeit = 400; // setzt die Variable auf den Wert 400
}
else if (temperatur>15){ // überprüft ob die Variable größer 15 ist
geschwindigkeit = 551; // setzt die Variable auf den Wert 511
}
OCR1A = (int)(geschwindigkeit+anhebung); // schaltet PB1 von 1 auf 0
auslastung = ((OCR1A/511)*100); // Prozentuale Auslastung berechnen und Wert in die Variable schreiben
ausgabeLcdauslastung(auslastung,3); // ruft das Unterprogramm ausgabeLcdauslastung auf und übergibt den Wert von auslastung
}
}
Fehlermeldung 1: expected '(' before wert
Fehlermeldung 2: expected declaration or statement at end of input
Mir ist klar dass ich irgendwo entsprechende Zeichen gefunden habe aber ich habe bisher noch keine lösung für das problem gefunden
mfg