Forum: Compiler & IDEs timer0 - 8bit - atmega1280 - ISR


von matthiask (Gast)


Angehängte Dateien:

Lesenswert?

hallo
ich bin seit nunmehr als 2 Tagen schwer am kämpfen und bitte um Feedback 
zu folgendem Problem.

Angelehnt an den folgenden Beitrag
http://www.mikrocontroller.net/attachment/highlight/16302
möchte ich einen Timer umsetzen.

Verwenden will ich dafür den 8-bit-Timer, der beim Überlauf eine ISR 
ausführt. Hierzu kommt es jedoch nicht...

Was ich bisher fand...
 - TIMER0_OVF_vect ist ggf. falsch _VECTOR(23) oder _VECTOR(24)
 -- Modifikation brachte jedoch keinen Erfolg

danke für jeden tippe

von Stefan E. (sternst)


Lesenswert?

Im Code kann ich kein Problem sehen.

matthiask schrieb:
> Verwenden will ich dafür den 8-bit-Timer, der beim Überlauf eine ISR
> ausführt. Hierzu kommt es jedoch nicht...

Woher weißt du das?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Das ist nicht wirklich eine Distribution, die ein gpio.h beinhalt?
Das hast selber dazugehackt, oder?

Aktiviere Warnungen, und beachte sie auch, zB für falsch geschriebene 
ISR-Bezeichner.

Gültige ISR-Bezeichner kann man im i-File sehen mit -save-temps -g3, die 
avr-libc Doku ist leider etwas diffus...

von matthiask (Gast)


Lesenswert?

Ich schlussfolgere das, da weder meine led leuchtet noch sich mein count 
aendert
Getestet habe ich das in verschiedenen ode variationen

von matthiask (Gast)


Lesenswert?

Die gpio.h ist von mir...

Die compileroptionen werde ich spaeter mal antesten... danke

von Stefan E. (sternst)


Lesenswert?

Welche Build-Umgebung? IDE? Eigenes Makefile? Wenn Makefile, dann 
posten.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Oje, 20 Meter Makefile im anrauschen...

Vermutlich nur ein klassischer Fall von Selbstverwirrung:

>>  Gpio g[] = {
>>    GPIO(H, 3),
>>    GPIO(E, 3),
>>    GPIO(G, 5)
>>  };

>>  g[0].Set(false);
>>  g[1].Set(false);
>>  g[2].Set(true);

>>  g[1].Set(true);

>>  GPIO(H, 3).Toggle();

Wie so oft liegt das Problem im nicht gezeigten Code, nämlich was .Set 
maches soll und warum es g[1] ist.

von matthiask (Gast)


Angehängte Dateien:

Lesenswert?

anbei eine aktualisierte Version ...

um Johann's bedenken aus dem Weg zu räumen, und andere potenzielle 
Fehlerquellen zu entfernen habe ich entsprechend meine Gpio 
Implementierung entfernt.


$ avr-g++ -D__AVR_ATmega1280__ -DF_CPU=16000000L -I/usr/lib/avr/include 
-I../inc -o main.cpp.obj -v -c ../main.cpp
$ avr-g++ main.cpp.obj  -o main
$ avr-objcopy -O ihex -R .eeprom main main.hex
$ sudo avrdude -q -q -C/usr/share/arduino/hardware/tools/avrdude.conf 
-patmega1280 -carduino -b57600 -P/dev/ttyUSB0 -U flash:w:atmegaCPP.hex

Die Warnlevel habe ich bisher noch nicht erhöhen können
(ich dachte -Wall müsste was bringen... aber gesehen habe ich das 
nichts)

was ich noch ergänzen muss...
Ich AVR-Studio habe ich den Code mit dem Simulator laufen lassen, da war 
auch alles "schön"...

nochmal danke vorab

von matthiask (Gast)


Lesenswert?

Ich habe ein CMakefile... entsprechend habe ich die Ausführung manuell 
vorgenommen...

$ avr-g++ -D__AVR_ATmega1280__ -DF_CPU=16000000L -I/usr/lib/avr/include 
-I../inc -o main.cpp.obj -v -c ../main.cpp
$ avr-g++ main.cpp.obj  -o main
$ avr-objcopy -O ihex -R .eeprom main main.hex
$ sudo avrdude -q -q -C/usr/share/arduino/hardware/tools/avrdude.conf 
-patmega1280 -carduino -b57600 -P/dev/ttyUSB0 -U flash:w:atmegaCPP.hex

von Stefan E. (sternst)


Lesenswert?

Da haben wir doch schon dein Problem. Ein "-D__AVR_ATmega1280__" ist 
kein adäquater Ersatz für die -mmcu Option. Die musst du auf jeden Fall 
mit angeben, und zwar nicht nur beim Compilieren, sondern auch beim 
Linken.

von matthiask (Gast)


Lesenswert?

... SUPER, jetzt läufts !!!

Die Option existierte in meiner CMakelist.txt-Datei...
(mittels 'cmake .. -DCMAKE_VERBOSE_MAKEFILE=TRUE' werden die Aufrufe 
sichtbar)

die Optionen fehlten jedoch bei der ausführung...

Ursache waren zuviele Leerzeichen im CMakelist.txt :
Falsch:
 SET(CXXFLAGS "${CMCU}  ${CDEFS} ${CINCS} ${COPT} ${CWARN}") "
Richtig:
 SET(CXXFLAGS "${CMCU} ${CDEFS} ${CINCS} ${COPT} ${CWARN}") "

"Darauf muss mann erstmal kommen"

Besten Dank an Stefan und Johann

von matthiask (Gast)


Lesenswert?

Ich muss meine erste Fehlerursache korrigieren...

Meine Build-Umgebung mit CMake besteht aus zwei Dateien,
 einer CMakeLists.txt und ein
 einer allgemeinen Include.cmake (enthält allg. Compiler-Settings)

Auszug aus dem fehlerhaftes CMakeLists.txt:
"
 cmake_minimum_required(VERSION 2.8)
 include(./Include.cmake)
 Project(ProjectName)
 set(BUILDRESULT BuildResult)
 ...
"

Die Compiler-Optionen (die in der Include.cmake) fehlten
in der Ausführung ("rm -rf * && cmake .. && make")

Die Ursache ist, dass das include(...) vor dem Project() steht.

Funktionierende Version ist
"
 cmake_minimum_required(VERSION 2.8)
 Project(ProjectName)
 include(./Include.cmake)
 set(BUILDRESULT BuildResult)
 ...
"

Ergänzen kann ich noch sagen, dass die "fehlerhafte Version"
nach einer Änderung im CMakelists.txt und die Compiler mit den
(bisher vermissten) Optionen ausgeführt wurde...
 0 rm -rf *
 1 cmake ..
 2 make (Ausführung ohne Optionen)
 3 CMakeList.txt modifiziert
 4 make (Ausführung mit Optionen)

"Alles nicht so einfach"  ;-)

VG Matthias

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.