Morgen, Wir sind gerade dabei eine Binäruhr mit dem ATMEGA8 zu realisieren. Wir haben den Schaltplan und das Programm fertig geschrieben, unabhängig voneinander funktioniert das ganze auch, jedoch wenn wir den ATMega8 in die Schaltung einbinden, wird der ATMega8 warm und es passiert nichts. Es wäre schön wenn sich einer dem Problem annehmen würde und uns helfen würde. Als Anhang der Schaltplan und quellcode Mit freundlichen Grüßen Xine .include "m8def.inc" //==========[ Register Definitions ]=============== .def akku = r16 .def Stunden = r17 .def Minuten = r18 .def Sekunden = r19 .def Kontrolle = r20 //==========[ Interrupt Vector Table ]=============== .org OVF0addr rjmp timer0_int .org OVF1addr rjmp timer1_int //==========[ Main Programm ]=============== .org 0x00 rjmp main .org 0x40 //Stackpointer main: ldi r16, LOW(RAMEND) out SPL, r16 ldi r16, HIGH(RAMEND) out SPH, r16 ldi r20, 0b00000001 ldi akku, 0b00111111 out PORTC, akku ldi akku, 0b00011000 out DDRD, akku rcall tim0_init rcall tim1_init main_loop: rcall show_time rjmp main_loop //==========[ Timer 0 ]=============== /* Wird verwendet um die Taster abzufragen */ //-----------[ init ]----------------- /* Hier fehlt das setzen des Startwerts */ tim0_init: // Startwert initialisieren // Prescaler setzen ldi r16, 0b00000101 ; Prescaler 1024 out TCCR0, r16 // Interrupt Maske setzen ldi r16, 0b00000101 ; TOIE0: Interrupt bei Timer Overflow out TIMSK, r16 // Interrupts aktivieren sei ret //-----------[ Overflow Ereignis]--------- /* */ timer0_int: rcall tim0_init in r16, PIND andi r16, 0b00011000 cpi r16, 0b00011000 breq next_c cpi r20, 0b00000010 breq control_h cpi r20, 0b00000100 breq control_m cpi r20, 0b00001000 breq control_s cpi r20, 0b00010000 breq leave_c reti // naechste Kontrolleinstellung aktivieren next_c: lsl r20 reti // kontrolle fuer Stunden // abschalten des Sekundentimers control_h: push r16 ldi r16, 0b00000000 out TCCR1B, r16 pop r16 sbrc r16,3 inc Stunden sbrc r16,4 dec Stunden reti // kontrolle fuer Minuten control_m: sbrc r16,3 inc Minuten sbrc r16,4 dec Minuten reti // kontrolle fuer Sekunden control_s: sbrc r16,3 inc Sekunden sbrc r16,4 dec Sekunden reti // kontrollmodus verlassen leave_c: ldi r20, 0x01 rcall tim1_init reti //==============[ Timer 1 ]================== /* Wird verwendet um Sekundenereignis zu erzeugen */ tim1_init: // Startwert ldi r16, 0xBE out TCNT1L, r16 ldi r16, 0xF0 out TCNT1H, r16 // Prescaler setzen ldi r16, 0b00000101 out TCCR1B, r16 // Interrupt Maske setzen ldi r16, 0b00000101 out TIMSK, r16 sei ret timer1_int: rcall tim1_init rcall zeitlauf reti //=====[ Zeitlauf ]====== /* Zaehlt die Zeitregister Stunden, Minuten und Sekunden hoch. Benoetigt zum Durchlauf in jeder konstellation 13 Takte + 1 fuer Return */ ;Takte zeitlauf: inc Sekunden ;1 1 1 1 cpi Sekunden,60 ;1 1 1 1 brne zlsek ;1 2 1 1 inc Minuten ;1 1 1 ldi Sekunden,0 ;1 1 1 cpi Minuten,60 ;1 1 1 brne zlmin ;1 2 1 inc Stunden ;1 1 ldi Minuten,0 ;1 1 cpi Stunden,24 ;1 1 brne zlstd ;1 2 ldi Stunden,0 ;1 rjmp zlend ;1 ;Summe 13 4 8 12 // 9 Wartetakte zlsek: nop nop nop nop // 5 Wartetakte zlmin: nop nop nop nop // 1 Wartetakt zlstd: rjmp zlend zlend: ret //==============[ Zeitanzeige ]=================== show_time: // Bit 0 fuer Sekunden freigeben sbi PORTD,0 SBRC Sekunden,0 RJMP sek1 rcall warten rs0: sbi PORTC, 0 SBRC Sekunden,1 RJMP sek2 rcall warten rs1: sbi PORTC, 1 SBRC Sekunden,2 RJMP sek4 rcall warten rs2: sbi PORTC, 2 SBRC Sekunden,3 RJMP sek8 rcall warten rs3: sbi PORTC, 3 SBRC Sekunden,4 RJMP sek16 rcall warten rs4: sbi PORTC, 4 SBRC Sekunden,5 rjmp sek32 rcall warten rs5: sbi PORTC, 5 // Bit 0 fuer Sekunden sperren cbi PORTD,0 // Bit 1 fuer Minuten freigeben sbi PORTD,1 SBRC Minuten,0 RJMP min1 rcall warten rm0: sbi PORTC, 0 SBRC Minuten,1 RJMP min2 rcall warten rm1: sbi PORTC, 1 SBRC Minuten,2 RJMP min4 rcall warten rm2: sbi PORTC, 2 SBRC Minuten,3 RJMP min8 rcall warten rm3: sbi PORTC, 3 SBRC Minuten,4 RJMP min16 rcall warten rm4: sbi PORTC, 4 SBRC Minuten,5 rjmp min32 rcall warten rm5: sbi PORTC, 5 // Bit 1 fuer Minuten sperren cbi PORTD,1 // Bit 2 fuer Stunden freigeben sbi PORTD,2 SBRC Stunden,0 RJMP std1 rcall warten rh0: sbi PORTC, 0 SBRC Stunden,1 RJMP std2 rcall warten rh1: sbi PORTC, 1 SBRC Stunden,2 RJMP std4 rcall warten rh2: sbi PORTC, 2 SBRC Stunden,3 RJMP std8 rcall warten rh3: sbi PORTC, 3 SBRC Stunden,4 RJMP std16 rcall warten rh4: sbi PORTC, 0 // Bit 2 fuer Stunden sperren cbi PORTD,2 ret sek1: cbi PORTC, 0 rcall leuchten rjmp rm0 sek2: cbi PORTC, 1 rcall leuchten rjmp rm1 sek4: cbi PORTC, 2 rcall leuchten rjmp rm2 sek8: cbi PORTC, 3 rcall leuchten rjmp rm3 sek16: cbi PORTC, 4 rcall leuchten rjmp rm4 sek32: cbi PORTC, 5 rcall leuchten rjmp rm5 min1: cbi PORTC, 0 rcall leuchten rjmp rm0 min2: cbi PORTC, 1 rcall leuchten rjmp rm1 min4: cbi PORTC, 2 rcall leuchten rjmp rm2 min8: cbi PORTC, 3 rcall leuchten rjmp rm3 min16: cbi PORTC, 4 rcall leuchten rjmp rm4 min32: cbi PORTC, 5 rcall leuchten rjmp rm5 std1: cbi PORTC, 0 rcall leuchten rjmp rh0 std2: cbi PORTC, 1 rcall leuchten rjmp rh1 std4: cbi PORTC, 2 rcall leuchten rjmp rh2 std8: cbi PORTC, 3 rcall leuchten rjmp rh3 std16: cbi PORTC, 4 rcall leuchten rjmp rh4 leuchten: nop nop nop ret warten: nop ret
Wie groß sind denn die Widerstände? S2/S3 sollten nach GND schließen, nicht nach +5V. Zweiten Oszillatorpin besser unbeschaltet lassen (PB7). Unbenutzte Portleitungen dürfen nur mit GND verbunden werden, wenn sie nie versehentlich als Ausgang konfoguriert und auf High geschaltet werden können. Sicherer ist es, sie offen zu lassen und als Eingänge mit Pull-Up zu definieren (DDRx=0, PORTx=1).
Genauso AREF. Wenn du an AREF nichts anschliest, dann lass ihn offen. Der Reset Taster ist wirkungslos. Bei AVR ist Reset standardmässig high und ein Low-Pegel löst einen Reset aus. (Habt ihr euch keine anderen Schaltungen angesehen, ehe ihr das Ding gebaut habt?)
Also 6 LEDs an einen PIN, dann sollten das schon Low Current sein. Ich würde vor die Spalten noch Transistoren schalten.
Nebenbei gibt es beim Mega 8/16/32 keinen analog GND (AGND) sondern nur GND! Holt euch mal bei Cadsoft die neueste Atmel.lbr
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.