Hallo ich bin es mal wieder
Nach dem ich das Programmieren für ein paar Monate ruhen lassen musste geht es jetzt mal wieder weiter.
Es geht immer noch um einen Datenlogger zum Aufzeichnen von Strom und Spannungswerte.
Mein Programm ist soweit fertig (hoffe ich zumindest)
Und die Funktionen (Unterprogramme) haben einzeln auch funktioniert.
Allerdings hab ich trotzdem noch 3 Fehler die ich mir nicht erklären kann.
Hier mal ein Ausschnitt aus dem Programm.
Zur Erklärung:
Es gibt 2 Interrupt Aufrufe.
Der 1. ist ein Timer Interrupt für das Abtasten der Kanäle.
Der 2. ist ein Externer Interrupt zum Stoppen der Aufnahme.
1.Fehler:
../main_Datenlogger.c:416: error: expected ';' before 'GIMSK'
Setze ich aber ";" dann kommen 4 weitere Fehler
Fehler 2 und 3:
../main_Datenlogger.c:450: error: static declaration of '__vector_13' follows non-static declaration
../main_Datenlogger.c:450: error: previous declaration of '__vector_13' was here
Ich hab keine Ahnung was der mit '__vector_13' meint
Und beim Testprogramm war das so OK.
Das mit dem Stop Taster hab ich noch nicht getestet gehabt.
Aber der Timer war wirklich mal OK gewesen.
Vielleicht kann mir ja jemand einen Tipp geben.
Ach ja ich verwende einen ATmega644.
gruß
Maik
Nach dem ich das Programmieren für ein paar Monate ruhen lassen musste geht es jetzt mal wieder weiter.
Es geht immer noch um einen Datenlogger zum Aufzeichnen von Strom und Spannungswerte.
Mein Programm ist soweit fertig (hoffe ich zumindest)
Und die Funktionen (Unterprogramme) haben einzeln auch funktioniert.
Allerdings hab ich trotzdem noch 3 Fehler die ich mir nicht erklären kann.
Hier mal ein Ausschnitt aus dem Programm.
Code:
// init Interrupt für Stopp Taster
// -------------------------------
MCUCR = (1 << ISC01) // Fallenden Flanke von INT0 auswerten
GIMSK = (1 << INT0) // Interrupt von INT0 aktivieren
// Wenn Interrupt für Stopp ausgelöst wird dann
// --------------------------------------------
ISR (INT0_vect) // Interrupt Vektorvariable vom Externem Eingang 0 PortD-2)
{
cli(); // alle Interrupts deaktivieren
Aktiv = 0; // Aktiv zurücksetzen
Zustand = ~0x04; // Zustand = Stopp
PortB_OUT(); // LED's setzen
_delay_ms (100); // 100ms Warten (entprellen des Stopptasters)
sei(); // Interrupt's freigeben
}
// init Interrupt für Timer
// ------------------------
cli(); //alle Interrupts sperren um 16Bit Register zu beschreiben
TCCR1A = 0x00; //keine PWM und keine Interrupt Ausgabe
TCCR1B = Vorteiler; //(0A...0D) Compare Modus (vergleich mit Sollwert) & Vorteile 1024
OCR1AH = Byte1; // 16 Bit Compare Register A die 8 höheren Bits (Vergleichswerte Regiser)
OCR1AL = Byte0; // 16 Bit Compare Register A die 8 Niedrigeren (Vergleichswerte Regiser)
sei(); // alle Interrups wieder freigeben
TIMSK1 |= (1<< OCIE1A); // Compare Interrupt (Vergleicher Interrupt) aktivieren
//----------------------------------------------------------------------------------------------------
// Wenn Timer Interrupt auslöst dann ausführen
// -------------------------------------------
ISR (TIMER1_COMPA_vect) // Interrupt Vektorvariable vom Timer1 Compare
{
Time = Time + 1; // Time um 1 erhöhen
if (Time == Durchlauf) // Time = die Anzahl wie oft der Interrupt Durchlaufen werden soll
{
Aufnahme = 1; // Merker für Aufnahmen setzen
Time = 0; // Time zurücksetzen
}
}
Zur Erklärung:
Es gibt 2 Interrupt Aufrufe.
Der 1. ist ein Timer Interrupt für das Abtasten der Kanäle.
Der 2. ist ein Externer Interrupt zum Stoppen der Aufnahme.
1.Fehler:
../main_Datenlogger.c:416: error: expected ';' before 'GIMSK'
Code:
MCUCR = (1 << ISC01) // Fallenden Flanke von INT0 auswerten
GIMSK = (1 << INT0) // Interrupt von INT0 aktivieren
Fehler 2 und 3:
../main_Datenlogger.c:450: error: static declaration of '__vector_13' follows non-static declaration
../main_Datenlogger.c:450: error: previous declaration of '__vector_13' was here
Code:
ISR (TIMER1_COMPA_vect) // Interrupt Vektorvariable vom Timer1 Compare
{
Time = Time + 1; // Time um 1 erhöhen
if (Time == Durchlauf) // Time = die Anzahl wie oft der Interrupt Durchlaufen werden soll
{
Aufnahme = 1; // Merker für Aufnahmen setzen
Time = 0; // Time zurücksetzen
}
}
Ich hab keine Ahnung was der mit '__vector_13' meint
Und beim Testprogramm war das so OK.
Das mit dem Stop Taster hab ich noch nicht getestet gehabt.
Aber der Timer war wirklich mal OK gewesen.
Vielleicht kann mir ja jemand einen Tipp geben.
Ach ja ich verwende einen ATmega644.
gruß
Maik