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

Thema: Timer und Register

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Danke =)
    Ich habe das Programm jetzt etwas getestet. Es funktioniert nicht wie es soll. Wann ist das schon der Fall... Wir haben COM0A1 gesetzte, laut Tabelle sollte damit PD5 auf 0 gesetzt werden bei einem Überlauf über OCR0A. Das tut es aber nicht.
    Dein Vorschlag mit dem Senden der werte erst auf Anfrage finde ich nicht schlecht, aber er sollte es möglichst selbst ständig tun. Beim Arduino hatte ich in der ISR einen Booleanischen Wert genommen der auf True und in der Ausgabe auf false gesetzt wird. Bei Assembler ein komplettes Register wegen einem Bit zu verschwendet scheint mir etwas krass.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    > Wir haben COM0A1 gesetzte, laut Tabelle sollte damit PD5 auf 0 gesetzt werden bei einem Überlauf über OCR0A.

    warum sollte PD5 gesetzt sein? Schau mal in der PinConfiguration im Datenblatt nach mit was PD5/PD6 verbunden ist!!!!!!!


    > aber er sollte es möglichst selbst ständig tun

    UART initalisieren und das senden wird dann selbstständig gemacht, Daten ins UDR schreiben und die HW macht den Rest


    > Bei Assembler ein komplettes Register wegen einem Bit zu verschwendet scheint mir etwas krass.

    Trugschluß!!!!!!!!! auch in Hochsprachen wird eine entsprechende Byteanzahl genutzt und wenn das 'A' empfangen wird ist das schon ein komplettes Byte ASCII-Tabelle anschauen.



    ist jetzt ein anderes Thema aber schau mal hier da is was vorbereitet auf nem ATmega8. sonst anpassen auf dein µc

    https://www.roboternetz.de/community...ine-Bibliothek

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Entschuldigem das war ein Tippfehler. Es sollte PD6 lautet.
    Das lässt das Datenblatt verlauten:
    (PCINT22/OC0A/AIN0) PD6
    Daraus entnehme ich, das es der richtige Pin ist, allerdings cleared er nicht

    Lässt sich der Usart eigentlich im Studio simulieren, hast du damit Erfahrung?
    Wenn ja, wie bekomme ich meine Timer, die wir im letzten Code implementiert haben angezeigt. Ich kenne nur den Hauseigenen Terminal, aber dieser muss immer mit einer Com Stelle verbunden sein.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    175
    ok check

    Das mit dem Clearen is mir in der 4erVersion auch schon aufgefallen Toggeln geht. Bei OVFL das setzen geht auch aber clearen scheint wohl ein Problem zu sein. Kam schon öfter in der SW vor das es falsch dargestellt wurde aber in der HW richtig funktioniert hat.


    > Lässt sich der Usart eigentlich im Studio simulieren, hast du damit Erfahrung?

    jep lässt sich simulieren nur wenn man Daten empfangen will, muss man beim pollen, dort wo die Daten ausgelesen werden sollen, erst quasi Daten reinschreiben im UDR per HAND setzen, RX Flag setzen damit Daten ausgelesen werden können.


    > Wenn ja, wie bekomme ich meine Timer, die wir im letzten Code implementiert haben angezeigt

    Na installieren auf ASM, Simulator wählen, µC wählen und loslegen dann siehst du das alles im I/O-View


    > Ich kenne nur den Hauseigenen Terminal, aber dieser muss immer mit einer Com Stelle verbunden sein.

    ??? welches? wenn die UART denn genutzt wird muss Hardwareseitig ne Connection bestehen aber nicht für die Simulation. In der Simulation wie gesagt muss das UDR per Hand gesetzt werden und das RX-Flag damit beim nächsten Takt die Daten ins Register geschoben werden.

    Bezug ist die 4er Version, die 6er auch mal angetestet aber da funzt das ein oder andere noch nicht so wirklich, für ASM reicht die 4er dicke aus.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    In der HW scheint das clearen auch nicht zu funktionieren, das Messgerät zeigt nur 5 Volt an.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo Saturas077,
    wie sieht denn jetzt das komplette Programm aus und mit welchem Takt wird der µC betrieben. In den letzten posts sehe ich zB. überhaupt keine Initialisierung der Interrupt Vektoren mehr.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    In diesem Code setze ich die Pins Manuell, aber der Pin PD6 sollte eigentlich automatisch nach jedem Compare Interrupt auf 0 gesetzt werden.
    Code:
    .include "m328Pdef.inc"
    
    /* Mikrokontroller.net; Persönliche Änderung auf 20MHz */
    .equ F_CPU = 20000000                           ; Frequenz
    .equ BAUD  = 9600                               ; Baudrate
     
    ; Berechnungen
    .equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
    .equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))      ; Reale Baudrate
    .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille
     
    .if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
      .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
    .endif
    
    .org 0x0000
    	jmp RESET ; Reset Handler
    	reti nop ; IRQ0 Handler
    	reti nop ; IRQ1 Handler
    	reti nop; PCINT0 Handler
    	reti nop; PCINT1 Handler
    	reti nop ; PCINT2 Handler
    	reti nop ; Watchdog Timer Handler
    	reti nop ; Timer2 Compare A Handler
    	reti nop ; Timer2 Compare B Handler
    	reti nop ; Timer2 Overflow Handler
    	jmp TIM1_CAP ; Timer1 Capture Handler
    	reti nop ; Timer1 Compare A Handler
    	reti nop ; Timer1 Compare B Handler
    	reti nop ; Timer1 Overflow Handler
    	jmp TIM0_COM ; Timer0 Compare A Handler
    	reti nop ; Timer0 Compare B Handler
    	reti nop ; Timer0 Overflow Handler
    	reti nop ; SPI Transfer Complete Handler
    	reti nop ; USART, RX Complete Handler
    	reti nop ; USART, UDR Empty Handler
    	reti nop ; USART, TX Complete Handler
    
    
    .def temp = r16
    .def value = r17
    .def status = r18
    .def timer0 = r20
    .def timer1_low = r21
    .def timer1_high = r22
    
    
    /* BEGINN DES HAUPTPROGRAMMES*/
    
    Reset:
    	ldi temp, HIGH(RAMEND)		; Stackpointer
    	out SPH, temp
    	ldi temp, LOW(RAMEND)
    	out SPL, temp
    
    	ldi temp, 0x11110011 ; Die Interrupt sollen als Eingang bleiben
    	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
    
    Loop:
    	;sbic PORTD, 6
    	;jmp Result_Output
    	jmp Loop
    
    isUDRclear:
    	ldi temp, UCSR0A
    	sbrs temp, 6	; Überprüfe ob das UDR Register LEER ist
    	rjmp isUDRclear		; Wenn nicht bleibt in einer Schleife bis es so ist.
    	sts UDR0, value
    	ret
    
    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
    
    /*		ISR ROUTINE		*/
    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
    	cpi timer0, 0x01
    	breq Sound_Off
    	reti
    
    TIM1_CAP:
    	ldi timer1_low, TCNT1L
    	ldi timer1_high, TCNT1H
    
    	reti
    
    Sound_On:
    	ldi temp, (1<<PD6)
    	out PORTD, temp
    	ldi timer0, 0x00		; setze Timer zurück
    
    	reti
    
    Sound_Off:
    	sbis PORTD, 6
    	reti
    	ldi temp, (0<<PD6)
    	out PORTD, temp
    	ldi timer0, 0x00
    
    	reti
    
    /* RESETS FUNCTION*/
    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
    
    Timer0_Reset:
    	ldi temp, ( (1<<COM0A1) | (0<<COM0A0) | (0<<WGM02) | (1<<WGM01) | (0<<WGM00) )		; der Ausgang wird immer beim Oberflow
    	out TCCR0A, temp			; immer auf LOW gesetzt
    
    	ldi temp, 0xFA				; 250 Schritte entsprechen genau 100us FA
    	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
    
    Timer1_Reset:
    	ldi temp, (1<<ICES1)
    	sts TIMSK1, temp
    
    	ret
    
    sync_0:
        ldi     r25,0x03
    sync_1:
        ldi     r26,0x03
    sync_loop:
        dec     r26
        brne    sync_loop
        dec     r25
        brne    sync_1  
        ret

Ä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