- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 5 von 5

Thema: Frage zu 2313 und Timer

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Scotch
    Registriert seit
    15.10.2004
    Ort
    Bei Braunschweig
    Alter
    52
    Beiträge
    305

    Frage zu 2313 und Timer

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo @ all,

    ich bin gerade dabei mir Assembler an Hand eines kleinen 2313 Board
    bei zu bringen. Auf der Platine sind Schalter und LED's und ein 4 Mhz Quarz.

    Die Led's mit schalter ein und auschalten bekomme ich auch schon hin.
    Auch einfache Blinklichter mit Zählschleifen klapt schon.
    Jetzt möchte ich es aber etwas aufwendiger haben.
    z.b. PortB Pin1 soll eine Led für 0,4 sec. an und dann wieder für 0,4 sec. aus
    gehen. Gleichzeitig soll an PortB Pin2 für 0,1 sec. an und dann für 0,5 sec.
    aus gehen.
    Ich denke das ich das dann mit dem Timer machen muß, aber wie?

    Cu Scotch

  2. #2
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78
    Hi Scotch,

    bei Assembler kann ich dir da nicht sehr helfen da ich mit Bascom programmiere!

    Evtl. hilft dir das Stück Code aus einer Lauflichtsteuerung was
    !!! Keine Gewähr, ob es funzt!!! Ist nicht von mir!
    Mußt Dir halt die Passagen raus suchen mit den Timern.
    Dürfte aber kein Problem sein.

    Code:
    ;Beginn des Programmcodes
    
    reset:	ldi r16,low(RAMEND)
    	out SPL,r16
    
    	ldi r16,0x00
    	out TCCR1A,r16  	;Timer 1 disconnect OC1 + PWM
    	ldi r16,0x03
    	out TCCR1B,r16		;Timer 1 prescaling 1/64
    	ldi r16,T1Lval
    	out TCNT1L,r16		;Timer low value
    	ldi r16,T1Hval
    	out TCNT1H,r16		;Timer high value
    	ldi r16,0x80
    	out TIMSK,r16		;Timer1 overflow enabled
    	sei			;Enable global Interrupts
    	
            ldi result,$ff          ;Port B -> output
            out DDRB,result
            out DDRD,result		;Port D -> output	
    
    Startprog:
    	
    	sei		;Enable global Interrupts
    ;Auswahl ob High oder Low geschoben wird
    	ldi Anzeige,$0		;LED on (Low)
    	sec			;set Carry (H wird durch die Ports geschoben)
    ;	ldi Anzeige,$ff		;LED off (High)
    ;	clc			;clear Carry (L wird durch die Ports geschoben)
    
    loop:	out PORTB,Anzeige
    	out PORTD,Anzeige
    	rjmp loop		;Timing durch Interrupts
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Scotch
    Registriert seit
    15.10.2004
    Ort
    Bei Braunschweig
    Alter
    52
    Beiträge
    305
    Danke für deine Antwort.

    Leider kann ich denn Code nicht testen da er unvollständig ist.
    Es werden Registernamen verwendet die aber nicht definirt werden.
    Ich habe mal versucht das umzuschreiben bekomme es aber nicht zum
    laufen.
    evtl kannst du mir den kompletten Code zukommen lassen.

    Cu Scotch

  4. #4
    Benutzer Stammmitglied Avatar von HPM
    Registriert seit
    16.02.2005
    Ort
    D-98744
    Beiträge
    78
    Hi Scotch,

    hier der komplette Code.
    Da ich mich nicht mit Assebler beschäftige kann ich Dir bei der Lösung aber nicht weiter helfen! Ich hoffe, der Autor des Progs. hat nichts dagegen, dass ich den Code hier reinstelle ??

    Code:
    ;******************************************************************************
    ; Verwendete Hardware:
    ; AVR Testboard Board mit 90S2313 Prozessor
    ;
    ; Erstellt: Dezember 2001, Klaus Leidinger
    ;
    ; Programm zum Testen der AVR Board Hardware.
    ; Lauflicht an beiden Ports. Achtung: PortD.7 gibt es nicht ;-)
    ; 
    ; Das Timing erfolgt über Interrupts.
    ;
    ;******************************************************************************
    
    .include "2313def.inc"	;Festlegen des verwendeten Chips
    
    .def Anzeige=r19
    .def temp1=r18
    .def result=r16
    .def temp=r17 
    
    ;Werte für 0,5 sec Timer bei 4MHZ Quarz
    ;.equ T1Lval=0xee
    ;.equ T1Hval=0x85
    ;Werte für 0,5 sec Timer bei 8MHZ Quarz
    .equ T1Lval=0xdc	
    .equ T1Hval=0x0b
    
    ; Start des Programmcodes
    .cseg
    
    .org $0000 
    	rjmp reset		;Reset extern oder Watchdog
    .org $0001 
    	reti ;rjmp INT0_int	;Externer Interrupt INT0
    .org $0002 
    	reti ;rjmp INT1_int	;Externer Interrupt INT1
    .org $0003 
    	reti ;rjmp Timer1_capt	;Timer 1 capture Mode
    .org $0004 
    	reti ;rjmp Timer1_comp	;Timer 1 compare Mode
    .org $0005 
    	rjmp Timer1_over	;Timer 1 overflow
    .org $0006 
    	reti ;rjmp Timer0_over	;Timer 0 overflow
    .org $0007 
    	reti ;rjmp UART_rxc	;Serial RX complete Handler
    .org $0008 
    	reti ;rjmp UART_dre	;Serial UDR empty Handler
    .org $0009 
    	reti ;rjmp UART_txc	;Serial TX complete Handler
    .org $000A 
    	reti ;rjmp ANA_comp	;Analog comperator
    	
    .db "Testprogramm für Microcontroller Board AVR 90S2313 Version 1.0"
    
    
    ;Beginn des Programmcodes
    
    reset:	ldi r16,low(RAMEND)
    	out SPL,r16
    
    	ldi r16,0x00
    	out TCCR1A,r16  	;Timer 1 disconnect OC1 + PWM
    	ldi r16,0x03
    	out TCCR1B,r16		;Timer 1 prescaling 1/64
    	ldi r16,T1Lval
    	out TCNT1L,r16		;Timer low value
    	ldi r16,T1Hval
    	out TCNT1H,r16		;Timer high value
    	ldi r16,0x80
    	out TIMSK,r16		;Timer1 overflow enabled
    	sei			;Enable global Interrupts
    	
            ldi result,$ff          ;Port B -> output
            out DDRB,result
            out DDRD,result		;Port D -> output	
    
    Startprog:
    	
    	sei		;Enable global Interrupts
    ;Auswahl ob High oder Low geschoben wird
    	ldi Anzeige,$0		;LED on (Low)
    	sec			;set Carry (H wird durch die Ports geschoben)
    ;	ldi Anzeige,$ff		;LED off (High)
    ;	clc			;clear Carry (L wird durch die Ports geschoben)
    
    loop:	out PORTB,Anzeige
    	out PORTD,Anzeige
    	rjmp loop		;Timing durch Interrupts
    	
    			
    
    ;Beginn der Unterprogramme und Interruptroutinen
             
    Timer1_over:			;Interrupt 500ms
    	rol Anzeige		;Zählerstand 
    	ldi r16,T1Lval		;Timer reload
    	out TCNT1L,r16		;Timer low value
    	ldi r16,T1Hval
    	out TCNT1H,r16		;Timer high value
    	reti
    
    .EXIT ;letzte Zeile des Programmes
    Viel Spaß im Forum
    MfG Peter

    Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Scotch
    Registriert seit
    15.10.2004
    Ort
    Bei Braunschweig
    Alter
    52
    Beiträge
    305
    Jo das sieht schon viel besser aus.
    komme aber erst am So. Abend zum testen.
    werde mich dann noch mal melden.

    Vielen Dank erst mal.

    Cu Scotch

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test