Hallo! uC: ATmega8 Entwicklungsumgebung AVRStudio folgendes problem mit nachfolgendem Code: Nach reset wird auf PortC 0b?1111111 ausgegeben. Wenn der Timer Interrupt kommt, wird PortC eingelesen, invertiert und wieder auf PortC ausgegeben. (sollte dann etwa auf 0V ausgegeben werden). An den Ports liegt allerdings 2,5V (Vcc/2) an. wenn ich direkt auf den PortC 0x00 ausgebe, erhalte ich das gewünschte Ergebnis. danke für eure hilfe stefan ---------------------------------------------------------------------- .include "m8def.inc" .def temp = r16 .equ AUS = 0x00 .equ EIN = 0xff .equ TIMERSET = 0x00 .org 0x000 rjmp RESET reti; rjmp EXT_INT0 ; IRQ0 Handler reti; rjmp EXT_INT1 ; IRQ1 Handler reti; rjmp TIM2_COMP reti; rjmp TIM2_OVF reti; rjmp TIM1_CAPT ; Timer1 Capture Handler rjmp TIM1_Compare_A ; Timer1 CompareA Handler reti; rjmp TIM1_COMPB ; Timer1 CompareB Handler reti; rjmp TIM1_OVF ; Timer1 Overflow Handler reti; rjmp TIM0_OVF ; Timer0 Overflow Handler reti; rjmp SPI_STC ; SPI Transfer Complete Handler reti; rjmp USART_RXC ; USART RX Complete Handler reti; rjmp USART_DRE ; UDR Empty Handler reti; rjmp USART_TXC ; USART TX Complete Handler reti; rjmp ADC ; ADC Conversion Complete Interrupt Handler reti; rjmp EE_RDY ; EEPROM Ready Handler reti; rjmp ANA_COMP ; Analog Comparator Handler reti; rjmp TWSI ; Two-wire Serial Interface Handler reti; rjmp SPM_RDY ; Store Program Memory Ready Handler RESET: ;set stack ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ;set port ldi temp, 0xff out DDRC, temp ldi temp, EIN out PORTC, temp ;set timer ldi temp, (1<<CS11) | (1<<CS10) out TCCR1B, temp ldi temp, 1<<OCF1A out TIFR, temp ldi temp, 1<<OCIE1A out TIMSK, temp ldi temp, 0x09 out OCR1AL, temp ldi temp, 0x3D out OCR1AH, temp sei ldi temp, 0x00 out TCNT1L, temp out TCNT1H, temp work: rjmp work TIM1_Compare_A: ;Werte sichern push temp in temp, SREG push temp ;Port toggeln in temp, PINC com temp out PORTC, temp ;Timer zurücksetzten ldi temp, 0x00 out TCNT1L, temp out TCNT1H, temp ;Werte zurückspielen pop temp out SREG, temp pop temp reti
;Port toggeln in temp, PINC <<<<<<<<<<<< ??? com temp out PORTC, temp
immer wieder dasselbe, ohne jetzt weiter in das Programm eingestiegen zu sein: 16bit-Schreiboperationen: "consequently, the high byte must be accessed first..."
hi, ich vermute, das die timer frequenz so hoch ist, das du dann einen PWM ausgang gebastelt hast und nun eben bei 50% an und 50% aus eben genau die hälfte der spannung. sezt mal den die timerfrequenz kleiner. grüsse
hi nochmal, wenn ich nix falsch verstanden habe, dann ist doch das TCCR1A und TCCR1B für die initialisierung der timers. versuchs mal mit TCCR1A=0x00; TCCR1B=0x05; als feste werte. grüsse
hi stefan, hast du es schon probiert? geht es ? grüsse
hi kamil! joop es funzt. einerseits der tipp mit dem pwm war nicht schlecht (falsches teilerverhältnis 64 statt 1024);andererseits die schreiboperation high vor low byte dürfte auch das seinige beigetragen haben. was ich nicht nachvollziehen kann ist, dass ich den wert nicht über PINC einlesen kann, da dies ja in der atmel doku eigentlich beschrieben wird. lg
@stefan Ähh? Das mit PINC war ein, in übernächtigter Duseligkeit geborenen, Schnellschuß von mir. Wie machst Du es denn jetzt??? Ich habe auch noch mal nachgeschaut. PINC sollte eigentlich gehen.
Hi Oliver! Habe nach deinem Posting natürlich auch PORTC ausprobiert und hat auch funktioniert, aber ich mach es jetzt nach der Doku mit PINC. lg
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.