Irgendwie bekome ich das mit dem Timer und den Interrupts nicht hin. Ich verwende einen MEga16 auf dem Testboard vov Kreatives-chaos. Bisher habe ich in Bascom die Programme geschrieben, doch damit soll nun schluss sein. Dieses Programm soll nichts weiter machen als Pins an PortD binär hochzuzählen. dazu soll der Timer beim Überlauf einen Interrupt auslösen und eine Variable inkrementieren. Mir ist egal wie schnell dies geschieht, denn bis jetzt sind nur zwei Lämpchen an (entspricht 0x11) an PortD. Wenn ich auf MAKE ALL klicke tauchen auf Warnungen auf, die mir aber nicht viel sagen Compiling: timer.c avr-gcc -c -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=11059000UL .... timer.c:39: warning: return type defaults to `int' timer.c:39: warning: function declaration isn't a prototype timer.c: In function `ISR': timer.c:39: warning: type of "TIMER0_OVF_vect" defaults to "int" timer.c:42: warning: control reaches end of non-void function hoffe Ihr könnt mir helfen
wenn du int main (void) schreibst musst du auch mit return 0; was zurückgeben. Ausserdem müssen Funktionen deklariert werden bevor du die benutzt. Also entweder komplett vor deiner main stehen, oder da deklariet werden. Gruß bla
Hast du eventuell noch avr-libc 1.2.x? Da gibt es das Makro ISR() noch nicht und nur die von dir auskommentierte veraltete Weise funktioniert. Bei mir mit gcc 4.0.2 und aktuellster avr-libc kann ich deinen Sourcecode kompilieren.
Ok lag wirklich nur an der Version. Mit der neuen hat es gleich funktioniert.
wenn du int main (void) schreibst musst du auch mit return 0.. stimmt nicht.................mit return ist keine pflicht.
wenn du reinschaust in die io...h, wirst du sehen , das man auch die alten verwenden kann. es wird machmal zuviel schwachsinn verbreitet. #define INT0_vect _VECTOR(1) #define SIG_INTERRUPT0 _VECTOR(1) /* External Interrupt Request 1 */ #define INT1_vect _VECTOR(2) #define SIG_INTERRUPT1 _VECTOR(2) /* Timer/Counter2 Compare Match */ #define TIMER2_COMP_vect _VECTOR(3) #define SIG_OUTPUT_COMPARE2 _VECTOR(3) /* Timer/Counter2 Overflow */ #define TIMER2_OVF_vect _VECTOR(4) #define SIG_OVERFLOW2 _VECTOR(4) /* Timer/Counter1 Capture Event */ #define TIMER1_CAPT_vect _VECTOR(5) #define SIG_INPUT_CAPTURE1 _VECTOR(5) /* Timer/Counter1 Compare Match A */ #define TIMER1_COMPA_vect _VECTOR(6) #define SIG_OUTPUT_COMPARE1A _VECTOR(6) /* Timer/Counter1 Compare Match B */ #define TIMER1_COMPB_vect _VECTOR(7) #define SIG_OUTPUT_COMPARE1B _VECTOR(7) /* Timer/Counter1 Overflow */ #define TIMER1_OVF_vect _VECTOR(8) #define SIG_OVERFLOW1 _VECTOR(8) /* Timer/Counter0 Overflow */ #define TIMER0_OVF_vect _VECTOR(9) #define SIG_OVERFLOW0 _VECTOR(9) /* Serial Transfer Complete */ #define SPI_STC_vect _VECTOR(10) #define SIG_SPI _VECTOR(10) /* USART, Rx Complete */ #define USART_RXC_vect _VECTOR(11) #define SIG_USART_RECV _VECTOR(11) #define SIG_UART_RECV _VECTOR(11) /* USART Data Register Empty */ #define USART_UDRE_vect _VECTOR(12) #define SIG_USART_DATA _VECTOR(12) #define SIG_UART_DATA _VECTOR(12) /* USART, Tx Complete */ #define USART_TXC_vect _VECTOR(13) #define SIG_USART_TRANS _VECTOR(13) #define SIG_UART_TRANS _VECTOR(13) /* ADC Conversion Complete */ #define ADC_vect _VECTOR(14) #define SIG_ADC _VECTOR(14) /* EEPROM Ready */ #define EE_RDY_vect _VECTOR(15) #define SIG_EEPROM_READY _VECTOR(15) /* Analog Comparator */ #define ANA_COMP_vect _VECTOR(16) #define SIG_COMPARATOR _VECTOR(16) /* 2-wire Serial Interface */ #define TWI_vect _VECTOR(17) #define SIG_2WIRE_SERIAL _VECTOR(17) /* External Interrupt Request 2 */ #define INT2_vect _VECTOR(18) #define SIG_INTERRUPT2 _VECTOR(18) /* Timer/Counter0 Compare Match */ #define TIMER0_COMP_vect _VECTOR(19) #define SIG_OUTPUT_COMPARE0 _VECTOR(19) /* Store Program Memory Ready */ #define SPM_RDY_vect _VECTOR(20) #define SIG_SPM_READY _VECTOR(20)
neuer: Natürlich kann man die verwenden, Stichwort ist hier aber 'noch'. Sie gelten als deprecated und werden in den nächsten Versionen der avr-libc eventuell entfernt.
man brauch diese nur wieder in die zuständige io...h reincopieren und ab geht die post ohne das programm zu ändern.
Na toll. da gewöhnt man sich lieber moderneres an. Nehme an, du hast ein Buch mit alter Schrift. Diese Schrift beherrschst du. Jetzt kommt ein neues Buch, was viel kürzer ist (Schrift ist "optimierter") Was tust du? Alles übersetzen und dann lesen, oder lieber neue Sprache lernen (und in die Zukunft schauen)..
meinst du ich schreibe jedes jahr die programme neu, bloss weil sich einpaar defines geändert haben. das schöne ist an c, das man nicht alles mitmachen musst was anderen aus langeweile einfällt. das alte oben wurde jetzt schon in fast 548000 winavr-c programmen geproggt. es ist es wert, das es nicht geändert wird nach dem neuen.
In dem Fall solltest du aber lieber bei der alten avr-libc bleiben. Es ist auch nicht schön, wenn ein Programm nur mit deiner selbst zusammengehackten und gepatchen avr-libc läuft...
ich habe nicht vor andere mit meinen programmen zu füttern. wer die routinen haben möchte kann dann die interrups selber umändern.
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.