- Akku Tests und Balkonkraftwerk Speicher         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: Timer und Register

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    05.05.2013
    Beiträge
    22
    Anzeige

    Powerstation Test
    Du hast natürlich recht, ich war bei einem anderen Wert in Gedanken.
    Ich habe jetzt einen Anfang gemacht und möchte das mit dem USART verbinden, allerdings klappt das nicht so wie ich das möchte.
    Die Low Time ist jetzt auf 10ms eingestellt, wie könnte ich das erweitern auf 100ms mit einem 8 Bit Timer?
    Es wäre lieb wenn Ihr einmal drüber schaut:
    Code:
    .def temp = r16
    .def value = r17
    .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, ( (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)
    
    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
    
    Timer0_Reset:
    	ldi temp, (1<<CS01)			; setze Vorteiler auf 8
    	out TCCR0B, temp
    
    	ldi temp, (1<<COM0A1)		; der Ausgang wird immer beim Oberflow
    	out TCCR0A, temp			; immer auf LOW gesetzt
    
    	ldi temp, 0xFA				; 250 Schritte entsprechen genau 100us
    	out OCR0A, temp
    
    	ldi temp, (1<<OCIE0A)		; aktiviere Compare-Overflow Interrupt
    	sts TIMSK0, temp
    
    Timer1_Reset:
    	ldi temp, (1<<ICES1)
    	sts TIMSK1, temp
    
    Loop:
    	jmp Loop
    
    isUDRclear:
    	ldi temp, UCSR0A 
    	sbis temp, 5	; Ü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
    
    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
    
    Sound_On:
    	cbi PORTD, 6
    	reti nop
    	
    
    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 nop
    
    TIM1_CAP:
    	/*Hardware speichert Werte im RAM*/
    	ldi timer1_low, TCNT1L
    	ldi timer1_high, TCNT1H
    	reti nop
    In der Doku steht:
    Code:
    in r16, UCSRnA
    sbrs r16, UDREn
    Wenn das so eingetippt wird, ist das UCSR0A Register nicht in der Range.
    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

    Liebe Grüße

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    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

  3. #23
    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.

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    > 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

  5. #25
    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.

  6. #26
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    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.

  7. #27
    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.

  8. #28
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    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

  9. #29
    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

  10. #30
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Saturas077 Beitrag anzeigen
    In diesem Code setze ich die Pins Manuell, aber der Pin PD6 sollte eigentlich automatisch nach jedem Compare Interrupt auf 0 gesetzt werden.
    Wenn der Code funktioniert, wie Du es möchtest, kann man den Fehler nicht suchen. PD6 sollte nach Deinen Settings und Datenblatt wirklich wieder nach jedem Compareinterrupt auf 0 gesetzt werden. Nur, wie wird er auf 1 gesetzt ohne die Sound_on Sound_off?

    Code:
    Sound_Off:     
           sbis PORTD, 6
    Abfrage des Pin Zustandes geschieht normalerweise über das PIND Register außer es absichtlich so gewollt. Wenn über die COMA Bits die OC0A Funktion aktiviert ist, empfiehlt sich das besonders, da der Pin dann nicht mehr auf Zuweisungen über das PORTD Register reagiert. (Aussage etwas wackelig, da ich das jetzt nicht ausprobiert habe und meine, das noch im Gedächtnis zu haben.)
    Geändert von Searcher (05.05.2014 um 12:19 Uhr) Grund: "sbis PORTD,6" in Frage gestellt
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ä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
  •  

Labornetzteil AliExpress