Leute ich seh den Fehler nicht,
ich will an Pin A3 eine PWM erzeugen aber der Timer läuft irgendwie
nicht an ...
hier mal der eigentlich kurze Code, sieht da jemand einen Fehler?
Eigentlich sollte der doch laufen, hat sonst noch jemand eine idee?
1
#include<stdlib.h>
2
#include<avr/io.h>
3
#include<avr/interrupt.h>
4
//#include <avr/pgmspace.h>
5
//#include <inttypes.h>
6
//#include <avr/eeprom.h>
7
//#include <string.h>
8
//#include <util/delay.h>
9
//#include <avr/wdt.h>
10
11
/* define CPU frequency in Mhz here if not defined in Makefile */
Christian schrieb:> while(1)> {>> return 0;>> }
Das Programm wird beendet und alle Interrupts deaktiviert.
Der absolute Stillstand tritt ein.
Christian schrieb:> aber der Timer> läuft nicht an
Doch, tut er (nehme ich mal an), das zeigt aber keine Wirkung. Weil dein
Code die Interrupts abschaltet
Christian schrieb:> Ich nutze ja Softpwm in den Interrupts
Du nutzt überhaupt keine Interrupts:
Arduino Fanboy D. schrieb:> Das Programm wird beendet und alle Interrupts deaktiviert.> Der absolute Stillstand tritt ein.
Christian schrieb:> Habe das so gändert, der Fehler bleibt:
Welcher?
Der Portpin wird eingeschaltet:
Christian schrieb:> TIMSK |= (1<TOIE0) ;
Passt doch. Oder was fehlt da jetzt noch?
Christian schrieb:> return 0;
Und streich diesen Quatsch. Wie kommst du auf diesen Unsinn?
Der Timer läuft nicht eigentlich muss der ja laufen wenn ich den OVF
Interrupt einschalte, habe gerade UART0 mal aktiviert, das senden klappt
und er bleibt auch in der Endlosschleife, also das Programm wird nicht
beendet.
aber der Pin toggelt einfach nicht in der ISR
Christian schrieb:> aber der Pin toggelt einfach nicht in der ISR
In welcher?
Christian schrieb:> ISR(TIMER0_OVF_vect)> {> P_PORT |= (1<<P1_PIN);>> }
Da steht ja auch nichts von Toggeln.
Und für die andere:
Christian schrieb:> ISR(TIMER0_COMP_vect)> {>> P_PORT &= ~(1<<P1_PIN);> }
ist der Interrupt nicht aktiv:
Christian schrieb:> TIMSK |= (1<TOIE0) ;
Christian schrieb:> komisch ist ja das Timer 1 auch nicht läuft, hatte das jetzt auch mal> getestet.
Das dauert aber auch 256x länger bis zum Overflow. Da kann man schnell
die Geduld verlieren.
Damit du siehst, ob der Port überhaupt toggelt, mach mal das hier:
Thomas E. schrieb:> Damit du siehst, ob der Port überhaupt toggelt, mach mal das hier:>> while(1)> {> P_PORT ^= (1<<P1_PIN);> _delay_ms(100);> }>> Und kommentier das Toggeln in der ISR aus.
Jo da kommt ein schönes Rechteck bei raus :)
Christian schrieb:> Jo da kommt ein schönes Rechteck bei raus
Na, dann ist der Controller ja schon mal in Ordnung.
Mit dem Rest der Fehlersuche lasse ich dich allerdings in Anbetracht der
Uhrzeit alleine. Wobei die Erfahrung zeigt, daß es oft sinnvoller ist,
das ganze Zeugs einfach liegen zu lassen und erst später wieder dabei zu
gehen.
Christian schrieb:> Ja ich mach jetzt auch schluss für heute, erstmal drüber schlafen
Und dann schmeiß mal den Simulator an ...
Christian schrieb:> TIMSK |= (1<TOIE0) ;
Bist du sicher, dass du da nicht schieben möchtest?
Ein bisschen Trennung zwischen Operanden und Operator erhöht die
Lesbarkeit ;-)
Arduino Fanboy D. schrieb:> Fein!> (Ist mir doch glatt durch die Lappen gegangen)
Nicht nur dir. Da guckt man später nochmal drüber und schon fällt es
einem wie Schuppen aus den Augen.
S. Landolt schrieb:>> P1 ist immer noch Input-Pin>> Christian versteht PIN nicht als 'Input', sondern als pin (Anschluss).
Ändert nichts. Ich sehe nicht, dass der entsprechende Pin als Ausgang
definiert wird, wäre aber schon wichtig in der Anwendung hier.
Leute ich danke euch !!!
War echt zu spät gestern und ich habs echt übersehen, so ein Mist, ich
hab echt an mir gezweifelt weil das ja eigentlich nicht viele Befehle
sind.
So ein Mist, und dafür wertvollen Speicherplatz im Internet verwendet...
Vielen Dank, läuft...