- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 36

Thema: Timer und Register

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #18
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    Ich glaub ich habe dir gestern falsche Daten gegeben in meiner Tabelle verlesen und habe die Gleichung für den FAST-PWM-Mode genutzt (Asche auf mein Haupt)

    So Korrektur für den CTC-Mode bei 20Mhz für 100µs: Teiler = 8; OCR0A = $7c (124dez) = 100µs
    CTC-Mode bei 20Mhz für 100µs: Teiler = 64; OCR0A = $0f (15dez) = 104µs

    Tja und mit 100ms im CTC-Mode siehts schlecht aus.

    jetzt zum Programm...

    Versuche mal die ganze Initialisierung in kleine Unterprogramme zu packen
    z.B.:
    Code:
    init_stack:
             ldi temp, HIGH(RAMEND)		; Stackpointer
    	out SPH, temp
    	ldi temp, LOW(RAMEND)
    	out SPL, temp
            
            rcall     UART_Reset
    
    loop: jmp      loop
    
    
    UART_Reset:
              ....
             .....
             ret

    UART_Reset: ich hoffe du hast UBRR_VAL irgendwo definiert denn die Angabe fehlt in deinem Post.

    Timer0_Reset: gut wäre es den Timer erst zu starten wenn du alle Timerinitalisierungen erledigt hast und du bist auch nicht m CTC-Mode weil WGM01 nicht gesetzt ist.

    isUDRclear: sbis temp, 5 dieser Befehl bezieht sich auf die PORTS, du möchtest aber ein Register nutzen dann nutze SBRS ......

    Code:
    isUDRclear:
    	lds temp, UCSR0A        ; Hier ist der Fehler LDS weil MOMERY MAPPED
    	sbrs temp, UDRE0	        ; Überprüfe ob das UDR Register LEER ist !!! Hier ist der Fehler :" Invalid number"
    	rjmp isUDRclear		; Wenn nicht bleibt in einer Schleife bis es so ist.
    	sts UDR0, value
    	ret nop

    > Wenn das so eingetippt wird, ist das UCSR0A Register nicht in der Range.
    Code:
    in r16, UCSRnA
    sbrs r16, UDREn
    In einen meiner Posts hatte ich es geschrieben, schau dir bitte mal die Inlcudedatei an, da steht bei einigen Registern MOMERY MAPPED und diese Register
    werden mit LDS r16,UCSR0A geladen und mit STS gespeichert, einfach mal reinschauen


    > Ich muss mir noch etwas einfallen lassen, wie ich die Ausgabe zum PC mache, ohne das interrupt zu verlängern und ohne es im Main Loop die ganze Zeit ausgeben zu
    > lassen

    Naja in dem du es Anforderst, du sendest über den PC ein 'A' und vergleichst es im µC wenn es stimmt machste ne Ausgabe.

    hier mal überarbeitet
    Code:
            ldi temp, HIGH(RAMEND)		; Stackpointer
    	out SPH, temp
     	ldi temp, LOW(RAMEND)
    	out SPL, temp
    
    	ldi temp, ( (1<<PD2) | (1<<PD3) ) ; Interrupt Pins auf Eingang, der Rest bleibt als Ausgang
    	out DDRD, temp
    	
    	ldi temp, 0xFF				; PORTB wird als Ausgang gesetzt
    	out DDRB, temp
    	ldi temp, 0x00
    	out PORTD, temp				; Alle Pins auf 0 setzen (Die beiden Eingänge bekommen keinen Pull-Up)
    	
    	rcall	UART_Reset
    	rcall	Timer0_Reset
    	rcall	Timer1_Reset
            sei                                        ;sonst wirds nix mit den INTS das ist die Globale Freigabe
    Loop:
    	jmp Loop
    
    
    Result_Output:
    	mov value, timer1_low		; Timerwert auf den USART geben
    	rcall isUDRclear
    	mov value, timer1_high		; Timerwert auf den USART geben
    	rcall isUDRclear
    ;	rcall sync_0				
    	jmp Loop
    
    
    ;***Init UART
    UART_Reset:
    	ldi temp, HIGH(UBRR_VAL)
    	sts UBRR0H, temp
    	ldi temp, LOW(UBRR_VAL)
    	sts UBRR0L, temp
    	 ldi temp, ( (1<<UMSEL00) | (1<<UCSZ01) | (1<<UCSZ00) ) ; synchron mit 8 Bit.
    	sts UCSR0C, temp
    	ldi temp, (1<<TXEN0)
    	 sts UCSR0B, temp
    	ret
    
    isUDRclear:
    	lds temp, UCSR0A 
    	sbrs temp, UDRE0	; Überprüfe ob das UDR Register LEER ist !!! Hier ist der Fehler :" Invalid number"
    	rjmp isUDRclear		; Wenn nicht bleibt in einer Schleife bis es so ist.
    	sts UDR0, value
    	ret 
    
    ;****Iint_T0
    Timer0_Reset:
    	ldi temp, (1<<COM0A1|1<<WGM01)		; der Ausgang wird immer beim Oberflow
    	out TCCR0A, temp			; immer auf LOW gesetzt
    
    	ldi temp, $7c				; 250 Schritte entsprechen genau 100us
    	out OCR0A, temp
    
    	ldi temp, (1<<OCIE0A)		; aktiviere Compare-Overflow Interrupt
    	sts TIMSK0, temp
    
    	ldi temp, (0<<CS02|1<<CS01|0<<CS00)			; setze Vorteiler auf 8
    	out TCCR0B, temp
    	
    	ret
    
    ;***Init_T1
    Timer1_Reset:
    	ldi temp, (1<<ICES1)
    	sts TIMSK1, temp
    	ret
    
    ;**********UP´s INT´s*************
    Sound_On:
    	cbi PORTD, 6
    	reti 
    	
    
    TIM0_COM:
    	/*Die Pegel auf LOW setzen brauch nicht implementiert werden,
    	da das von der HArdware gemacht wird*/
    	inc timer0
    	cpi timer0, 0x64 ; Damit wird der High Timer auf 10ms festgelegt.
    	breq Sound_On
    	reti 
    
    TIM1_CAP:
    	/*Hardware speichert Werte im RAM------>> nein Das ist nicht der RAM ganz normaler RegisterBereich wenn mit .equ timer1_low = $0100 festlegen*/
    	ldi timer1_low, TCNT1L
    	ldi timer1_high, TCNT1H
    	reti
    Nachtrag: Schon mal überlegt auf´s AVR-Studio 4.19 zu wechseln ? Das 6er ist so ziemlich noch nicht das gelbe vom Ei. Funktioniert auch mit MK2.
    Geändert von avr_racer (04.05.2014 um 13:53 Uhr) Grund: Nachtrag

Ähnliche Themen

  1. gleiche register bei atmega32 und 16
    Von avrrobot im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 20.02.2011, 09:19
  2. Timer-Register mögen Befüllung durch Funktion nicht
    Von stefan_Z im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 06.08.2007, 18:25
  3. Asuro und OSCCAL Register Taktfrequenz
    Von Winne im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 11.09.2005, 08:49
  4. Interne Register und Register in SRAM
    Von FoCus im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 27.07.2005, 12:06
  5. ADC und USART über Register?!
    Von BASTIUniversal im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 29.04.2005, 13:28

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress