Hallo ich bin gerade am verzweifeln. Seit zwei Tagen versuche ich AVR Toolchain Problem zu lösen (oder meine eigenen, bin nicht sicher). Google, Forenbeiträge lesen, Datenblätter wälzen, verschiedene Toolchain Versionen, hat alles nix gebracht. Ich hoffe es liegt einfach an meinen Code... Problem 1) _delay_ms() geht nur mit konstanten die zur compilezeit fest stehen. Soweit habe ich das schon kapiert. Also habe ich eine Wrapper Funktion gemacht void my_delay_ms(uint16_t count) { while(count--) { _delay_ms(1); } } Funktioniert mit konstanten und mit lokalen variablen. Sobald ich aber eine globale variable nehme oder eine lokale static definiere gehts nicht mehr. Ich toggle ein Pin mit my_delay_ms(100) und es geht wir erwartet. Mit einer globale variable und dem sebeln Wert toggelt der Pin im µs Bereich, als hätte der Code keine Funktion mehr. Problem 2) Habe schließlich aufgegeben und wollte das über einen Timer-Interrupt steuern. Schon stieß ich auf das nächste Problem. Sobald ich sei() Aufrufe scheint nichts mehr zu gehen. Problem 3) Damit ich besser sehe was passiert (habe keinen jtag-debugger) implementiere ich UART Kommunikation. Das geht auch ohne Interrupts. Ich teste hier also auch noch mal ob ich das mit interrupts hinbekomme und wieder geht nichts. Anbei ist ein einfaches auf das Minimum reduzierte UART-Beispiel mit ISR für den Empfang. 1.) Es gibt Hello aus ohne ISR (geht) 2.) Schickt 3 empfangene Zeichen als Echo zurück ohne ISR (geht) 3.) Danach aktiviere ich die interrupts mit sei() -> reset gibt wieder hello aus. Eine ISR für USART_RX_vect ist natürlich vorhanden, wird aber anscheinend nie betreten. (habe ich mit dem oszi und einem IO getestet) Eine ISR für BADISR_vect um eventuelle vergessen Interrupts abzufangen hat auch nix geholfen. Ich hoffe mir kann da jemand helfen. Ach ja, hier noch meine aktuelle Toolchain, falls es da dran liegen soll: binutils 2.21 gcc 4.3.4 avr-libc 1.7.1 HW läuft mit 8MHz Quarz (habe ich an PB0 mit entsprechendem FUSE bit und Oszi überprüft)
Du bist der Held des Tages. Das wars. Da hätte ich noch ewig gesucht. Danke. Danke. Danke.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.