- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 19

Thema: Keine Anzeige am LCD

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.08.2015
    Beiträge
    16

    Keine Anzeige am LCD

    Hallo alle Zusammen,

    ich möchte mithilfe ATtiny26 Mikrocontroller eine spannung zwischen 0 und 5 v Messen, Vorerst gabe ich zur Erfassung der Spannung ADC eigenstellt. Darauf hin habe ich LCD intialisiert.. Soweit gut.. und ich habe dann das Programm laufen lassen, jedoch sehe keinen Balken an meinem LCD und es tut sich nichts..

    Hier ist mein Quellcode:


    ;Voreinstellungen

    .device ATtiny26
    .nolist
    .include "tn26def.inc"
    .list

    ;Deklarationen

    .def mp=R16 ;allgemeine Register
    .def adhigh=R17 ;Ergebnis vom ADC

    ;Stackpointer initialisiern

    ldi mp, RAMEND
    out SP, mp

    ;Definition der Ein und Ausgänge

    ldi mp, 0b11111111
    out DDRB, mp

    ldi mp, 0b11111110
    out DDRA,mp

    ldi mp,0b00000000
    out TCNT0,mp


    ;Einstellungen des ADC Wandlers
    ;Die Spannung von 5V (analog) in eine 8 bit (digital) zahl umwandeln
    ;Initialisierund des ADMUX Registers

    ldi mp,0b00100000 ;AVCC Betriebsspannung als Referenzspannung, Datenrichtung linksbündig
    out ADMUX,mp ;ADC0 Analoger Eingang

    ;Initialisierung des ADCSR Registers

    ldi mp,0b10000101 ;AD Wandler aktiviert, Einzelwandlung "Single Conversion", Vorteiler 32
    out ADCSRA,mp

    ; ADC für eine Einzelwandlung starten

    Main:
    sbi ADCsRA, ADSC

    LOOP:

    sbic ADCSRA, ADSC
    rjmp LOOP

    ;oberste 8 Bit einlesen

    in adhigh,ADCH


    ;LCD

    .def mp1=R18
    .def mp2=R19
    .def mp3=R20

    ;RS auf PA4
    ;E auf PA5
    ;PB4..PB5 auf PA1..PA2
    ;PB6..PB7 auf PA6..PA7

    .equ LCD_PORT=PORTA
    .equ LCD_DDR=PORTA
    .equ PIN_E=5
    .equ PIN_RS=4

    LCD_init:

    ldi mp1,11111110
    out LCD_DDR,mp1

    ldi mp3,6

    powerupwait:

    rcall delay5ms
    dec mp3
    brne powerupwait ;Wenn 5ms abgelaufen dann Schleife verlassen

    ldi mp1, 0b00000011 ;muss dreimal hintereinander gesendet werden
    out LCD_PORT, mp1

    rcall LCD_enable ;1
    rcall delay5ms
    rcall LCD_enable ;2
    rcall delay5ms
    rcall LCD_enable ;3
    rcall delay5ms

    ; 4-Bit-Modus einstellen

    ldi mp1, 0b00000010
    out LCD_PORT, mp1
    rcall LCD_enable
    rcall delay5ms


    ; Funktionen setzen
    ;DL=0-->4-Bit-Schnittstelle
    ;N=1--->zwei Zeilen
    ;F=0--->5x8 Matrix

    ldi mp1,0b00101000
    rcall LCD_command

    ;Anzeigenkontrolle ein/aus
    ;D=1 Anzeige ein
    ;C=0 Cursor aus
    ;B=0 Blinken aus

    ldi mp1,0b00001100
    rcall LCD_command


    ;fertig initialisiert

    ldi mp1,0b00000100
    rcall LCD_command

    ret

    ;Löschen Anzeige

    LCD_clear:

    ldi mp1,0b00000001
    rcall LCD_command
    rcall delay5ms
    ret

    ;Zurück

    LCD_home:

    ldi mp1,0b00000010
    rcall LCD_command
    rcall delay5ms
    ret


    ;Datenbyte an das LCD senden
    LCD_data:

    mov mp2,mp1
    swap mp1
    andi mp1,0b00001111
    sbr mp1, 1<<PIN_RS
    out LCD_PORT,mp1
    rcall LCD_enable

    andi mp2, 0b00001111
    sbr mp2,1<<PIN_RS
    out LCD_PORT, mp2
    rcall LCD_enable
    rcall delay50us
    ret


    ;Befehl an das LCD senden
    LCD_command:

    mov mp2,mp1
    swap mp1
    andi mp1,0b00001111
    out LCD_PORT,mp1
    rcall LCD_enable
    andi mp2,0b00001111
    out LCD_PORT, mp2
    rcall LCD_enable
    rcall delay50us
    ret


    LCD_enable:

    sbi LCD_PORT, PIN_E ;Enable High
    nop
    nop
    nop
    cbi LCD_PORT, PIN_E ;Enable Low
    ret


    ;Zeitschleife

    ;50 µs Pause

    delay50us:
    ldi mp1, $42

    delay50us_:
    dec mp1
    brne delay50us_
    ret

    ;Pause für die Befehle
    ;5ms Pause bei 1 MHz

    delay5ms:

    ;äußere Schleife

    ldi mp1, $21

    ;innere Schleife

    Loop0:

    ldi mp2, $C9

    Loop1:

    dec mp2
    brne Loop1
    dec mp1
    brne Loop0
    ret




    Kann mir jemand sagen wo der Fehler ist?
    Stimmt etwas mit der Initialisierung nícht??


    viele Grüße

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    Hallo,

    schonmal am Kontrastpoti gestellt ?? denn müsste die erste Zeile ohne Initialisierung nen dunklen Balken anzeigen, Kontrast leicht runter drehen bis zur Hälfte. Nach der Init sollte der Balken verschwinden.

    Mir fällt auf das du zwar das LCD inites aber weder eine Umwandlung der Zahlen vornimmst noch das du die Daten zum LCD schickst?????

    1. Grundinitialisierung des Controllers mit Stack/Register/Ram alles zum Anfang machen
    2. LCD initialisieren
    3. ADC initialisieren

    4. Main abarbeiten
    4.1 Messung durchführen
    4.2 Zahlenwerte wandeln in bevorzugtes Format
    4.3 Ausgabe auf LCD
    4.4 Sprung zu 4

    Schau mal unter

    https://www.roboternetz.de/community...grammschnipsel

    für Atmega16 / 8 oder tiny2313 wie dort die Init gemacht wurde.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    14.08.2015
    Beiträge
    16
    Hallo ,

    erstmal vielen Dank für die schnelle Antwort....
    Ist es eigentlich nicht egal ob ich zuerst LCD oder ADC initialisiere?

    zu Punkt 4.1) Wie führe ich Messungen durch? Ich dachte diese geschieht indem ich ADC initialisiere?
    zu Punkt 4.2) Ist dies mit zahlenwerte wandeln gemeint?

    lcd_number:
    push temp1 ; die Funktion verändert temp1 und temp2,
    push temp2 ; also sichern wir den Inhalt, um ihn am Ende
    ; wieder herstellen zu können

    mov temp2, temp1 ; das Register temp1 frei machen
    ; abzählen wieviele Hunderter
    ; in der Zahl enthalten sind
    ;** Hunderter **
    ldi temp1, '0'-1 ; temp1 mit ASCII '0'-1 vorladen
    lcd_number_1:
    inc temp1 ; ASCII erhöhen (somit ist nach dem ersten
    ; Durchlauf eine '0' in temp1)
    subi temp2, 100 ; 100 abziehen
    brcc lcd_number_1 ; ist dadurch kein Unterlauf entstanden?
    ; nein, dann zurück zu lcd_number_1
    subi temp2, -100 ; 100 wieder dazuzählen, da die
    ; vorherhgehende Schleife 100 zuviel
    ; abgezogen hat
    rcall lcd_data ; die Hunderterstelle ausgeben

    ;** Zehner **
    ldi temp1, '0'-1 ; temp1 mit ASCII '0'-1 vorladen
    lcd_number_2:
    inc temp1 ; ASCII erhöhen (somit ist nach dem ersten
    ; Durchlauf eine '0' in temp1)
    subi temp2, 10 ; 10 abziehen
    brcc lcd_number_2 ; ist dadurch kein Unterlauf enstanden?
    ; nein, dann zurück zu lcd_number_2
    subi temp2, -10 ; 10 wieder dazuzählen, da die
    ; vorherhgehende Schleife 10 zuviel
    ; abgezogen hat
    rcall lcd_data ; die Zehnerstelle ausgeben

    ;** Einer **
    ldi temp1, '0' ; die Zahl in temp2 ist jetzt im Bereich
    add temp1, temp2 ; 0 bis 9. Einfach nur den ASCII Code für
    rcall lcd_data ; '0' dazu addieren und wir erhalten dierekt
    ; den ASCII Code für die Ziffer


    pop temp2 ; den gesicherten Inhalt von temp2 und temp1
    pop temp1 ; wieder herstellen
    ret ; und zurück

    viele Grüße

    - - - Aktualisiert - - -

    also ich sehe gar keine verändung am LC Display

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    Ja ist es aber selber legt man sich ja seinen Ablauf fest und wenn die Sachen schon mal funktioniert haben kann man sie auch als erstes hinschreiben bzw aktivieren...

    > zu Punkt 4.1) Wie führe ich Messungen durch? Ich dachte diese geschieht indem ich ADC initialisiere?

    das ist nur die Vorbereitung das der ADC eingestellt/aktiviert ist. Außer ich habe nur einen Messkanal dann kann man den Free Running Mode nutzen...

    > ; ADC für eine Einzelwandlung starten
    > Main:
    > sbi ADCsRA, ADSC

    da steht Einzelwandlung starten d.h. ADSC (StartConversion) aber nur bis die Wandlung fertig ist und wenn sie beendet ist bleib sie das auch.

    Um immer wieder eine neue Messung zu starten, für nur EINEN Messkanal, wäre es Sinnvoll den FREE RUNNING MODE zu nutzen, wenn EINE Messung aber über die SingleConversion gemacht werden soll, dann muss das ADSC-Bit immer wieder neu gesetzt werden um die Wandlung anzustoßen.

    Warum gibs das ?? Ganz einfach, es gibt nur ein ADC aber mehrere Messkanäle, die man nutzen möchte/könnte/will und die Umschaltung kann nur gemacht werden wenn kein Wandlung gestartet wurde/ist.

    Hoffe das es soweit verständlich ist. Ab und an das Datenblatt nutzen, denn dort steht ne janze Menge drin....


    > zu Punkt 4.2) Ist dies mit zahlenwerte wandeln gemeint?

    mmhh überleg mal kannst du sofort auf dem LCD den Hex oder Bin oder Octawert richtig interpretieren???? Die meisten eher weniger, also nimmt man eine Zahlsystemwandlung, von xxSystem zum dezimalen System vor.


    Hinweis um Quellcode zum posten, rechts unten mal auf erweitert klicken, dann kann auch Quellcode lesbarer eingestellt werden... UND GANZ WICHTIG immer den kompletten Code einstellen weil sonst keiner die Zusammenhänge erkennt, es ist ziemlich umständlich sonst zu lesen.... is ja keine Klatschpresse hier D....

    Kurze Init als Hilfe... auf das Zeichen # klicken und dann den Text einfügen

    Code:
    ;.device ATtiny26
    ;.nolist  <<<<kann man weg lassen
     .include "tn26def.inc"
    ;.list <<<<<kann man weg lassen
    
     ;Deklarationen
    
     .def   mp       =R16 ;allgemeine Register
     .def   adhigh  =R17 ;Ergebnis vom ADC Achtung der ADC HAT ADCH:ADCL-Register
     .def   mp1     =R18
     .def   mp2     =R19
     .def   mp3     =R20
    
     ;RS auf PA4
     ;E auf PA5
     ;PB4..PB5 auf PA1..PA2
     ;PB6..PB7 auf PA6..PA7
    
     .equ LCD_PORT=PORTA
     .equ LCD_DDR=PORTA
     .equ PIN_E=5
     .equ PIN_RS=4
    
     ;Stackpointer initialisiern
    
     ldi mp, RAMEND
     out SP, mp
    
    racll      lcd_init          ;init
    rcall      clear_lcd
    
    rcall      adc_init
    
    Loop:
    ;und hier steht dein Hauptprogramm
    rjmp    loop
    Frage: Wann hast du angefangen zu programmiern mit Assembler??

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    14.08.2015
    Beiträge
    16
    Hallo, also nicht lang.. so richtig seit einem Monat befasse ich mich mit assembler...

    - - - Aktualisiert - - -

    Mein Quellcode ist falsch ..Im AVR Tutorial wurde Atmega8 benutzt und ich verwende ein Attiny26 und somit sind die Pins anders belegt.
    Ich musste mein Code verändern um überhaupt noch eine Verbindung mit dem LCD herzustellen ((

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von avr_racer
    Registriert seit
    01.04.2014
    Ort
    MecklenburgVorpommern
    Beiträge
    174
    1 Monat und dann gleich LCD 0.o das vllt doch bisschen viel aufeinmal...

    Das heißt du musst die Pins nur im Quellcode anpassen. Sind deine Datenpins nicht alle am selben Port, wirds richtig schwierig da du die Bits umherspringen lassen musst, also eher auf einen halben Port die 4 DataPins anschließen und die anderen beiden können beliebig irgendwo angeschlossen werden.

    Wie ist der bisherige Sachstand also Stand Verkabelung Software usw???

    AtTiny26_origin.asm
    Code:
    ;# Projekt: 								# 
    ;# 											#
    ;#											#
    ;# Taktfrequenz des AVR: 4 MHz	 			#
    ;# 											#
    ;# CS-SOFT 									#
    ;###########################################
    
    .include "tn26def.inc"	;Tiny 26
    
    ;hier Rregisterdeklarationen
    .def math1h 	= r8
    .def math1l 	= r9
    .def math2h 	= R10
    .def math2l 	= r11
    .def matherghh	= r12
    .def mathergh	= r13
    .def mathergl	= r14
    .def mathergll	= r15
    
    .def temp0 = r16 	; 
    .def temp1 = r17 	;
    .def temp2 = r18
    .def temp3 = r19 	;
    .def temp4 = r20
    .def cnt   = r21
    
    ;Konstanten
    ;für UART KOM
    .equ cpu	= 4000000
    .equ Baud	= 9600
    .equ UBRRx	= cpu/(16*Baud)-1
    
    ;Definitionen für den RAM
    ;**********SRAM
    .equ 	erg_k		=	$0060			;erg_k wird bis zu 5 weiteren bytes genutzt sprich erg_k+5
    .equ 	ocra0		=	$0065			;für T0
    .equ	ocrb0		=	$0066			;für T0		
    .equ 	ocra1h		=	$0067			;;;;;
    .equ 	ocra1l		=	$0068			;;;;;;;; für T1 A channel
    .equ 	ocrb1h		=	$0069			;;;;;
    .equ 	ocrb1l		=	$006a			;;;;;;;; für T1 B channel
    .equ 	icr1xh		=	$006b			;;;;;
    .equ 	icr1xl		=	$006c			;;;;;;;; für T1 ICR
    .equ	eep_adr		=	$006d			;eeprom
    .equ	hadc		=	$006e			;High ADC 
    .equ	ladc		=	$006f			;Low ADC
    
    ;ADC Deklaerationen
    .equ	ADC_ddr_a	=	ddrA
    .equ	ADC_Port_a	=	PortA
    .equ	ADC_Pin_a	=	PinA
    .equ	Chan0		=	0
    .equ	Chan1		=	1
    .equ	Chan2		=	2
    .equ	Chan3		=	3
    .equ	Chan4		=	4
    .equ	Chan5		=	5
    .equ	Chan6		=	6
    .equ	ADC_ddr_b	=	ddrB
    .equ	ADC_Port_b	=	PortB
    .equ	ADC_Pin_b	=	PinB
    .equ	Chan7		=	4
    .equ	Chan8		=	5
    .equ	Chan9		=	6
    ;.equ	Chan10		=	7;=RESET FINGER WEG SONST AUSGESPERRT
    
    ;***************************Einsprungadressen***********************
    .cseg
    .org $0000
    	rjmp		stack
    .org $0001		;1
    	reti;rjmp	INT_0
    .org $0002		;2
    	reti;rjmp	I/O_pins chnage maks Interrupt
    .org $0003		;3
    	reti;rjmp	INT_T1_COMPa
    .org $0004		;4
    	reti;rjmp	INT_T1_COMPb
    .org $0005		;5
    	reti;rjmp	INT_T1_OVF
    .org $0006		;6
    	reti;rjmp	INT_T0_OVF0
    .org $0007		;7
    	reti;rjmp	INT_USI_Strt
    .org $0008		;8
    	reti;rjmp	INT_USI_OVF
    .org $0009		;9
    	reti;rjmp	INT_EE_rdy
    .org $000a		;a
    	reti;rjmp	ANA_COMP
    .org $000b		;b
    	reti;rjmp	ADC	
    
    ;***************************Init mit allem drumdran*****************
    stack:	ldi 		temp0,low(ramend)   ;Stackpointer festlegen
            out 		sp, temp0
    
    	;	rcall		lcd_init
    	;	rcall		lcd_clear
    		rcall		adc_init
    
    Hauptprogramm:
    		rcall		adc_chan_0
    		rcall		start_convers
    		
    		rcall		adc_chan_1
    		rcall		start_convers
    		
    		rcall		adc_chan_2
    		rcall		start_convers
    		
    		rcall		adc_chan_3
    		rcall		start_convers
    		
    		rcall		adc_chan_4
    		rcall		start_convers
    		
    		rcall		adc_chan_5
    		rcall		start_convers
    	
    		rcall		adc_chan_6
    		rcall		start_convers
    		
    		rcall		adc_chan_7
    		rcall		start_convers
    		
    		rcall		adc_chan_8
    		rcall		start_convers
    		
    		rcall		adc_chan_9
    		rcall		start_convers
    
    		rjmp		Hauptprogramm
    
    .include "adc_tiny26.asm"
    ;*******************************************************************
    adc_tiny26.asm
    Code:
    /*
    .equ	ADC_ddr		=	ddr?
    .equ	ADC_Port	=	Port?
    .equ	ADC_Pin		=	Pin?
    .equ	Chan0		=	0
    .equ	Chan1		=	1
    .equ	Chan2		=	2
    .equ	Chan3		=	3
    .equ	Chan4		=	4
    .equ	Chan5		=	5
    .equ	ref5		=	$1312
    .equ	ref256		=	$09d0
    */
    
    ;mit Interrupt
    start_convers_int:
    		in			temp0,adcsra	;wenn ADFR aktiv dann nur adc_read nötig für jeweiligen kanal
    		ori			temp0,(0<<ADEN|1<<ADSC|0<<ADFR|1<<ADIE|1<<ADPS2|0<<ADPS1|0<<ADPS0)	;freigabe ADC Abtastrate zwischen 50Khz-200Khz Teiler=32 single mode
    		out			adcsra,temp0	;
    		sei
    		ret
    
    ;ohne Interrupt dann abfrage auf des bits ADSC=1?????
    start_convers:
    		in			temp0,adcsra
    		ori			temp0,(0<<ADEN|1<<ADSC|0<<ADFR|0<<ADIE|1<<ADPS2|0<<ADPS1|1<<ADPS0);freigabe der Messung	
    		out			adcsra,temp0
    start_convers2:					;;;
    		sbic		ADCSR,ADSC		;;;;;; diese kleine routine braucht man nicht wenn man mit ints arbeitet
    		rjmp		start_convers2	;;;
    		in			temp0,adcl		;wichtig erst low 
    		in			temp1,adch		;dann high lesen sonst erg müll
    		sts			ladc,temp0
    		sts			hadc,temp1
    		ret
    
    ;******************************adc_interrupt**********************
    adc_rdy:
    		in			temp0,adcl		;wichtig erst low 
    		sts			ladc,temp0
    		in			temp1,adch		;dann high lesen sonst erg müll
    		sts			hadc,temp1
    		reti
    
    
    ;***********************adc_init*****************************
    adc_init:
    		ldi			temp0,(0<<Chan6|0<<Chan5|0<<Chan4|0<<Chan3|0<<Chan2|0<<Chan1|0<<Chan0)
    		out			ADC_ddr_a,temp0
    		ldi			temp0,(0<<Chan6|0<<Chan5|0<<Chan4|0<<Chan3|0<<Chan2|0<<Chan1|0<<Chan0)
    		out			ADC_Pin_a,temp0
    
    		ldi			temp0,(0<<Chan9|0<<Chan8|0<<Chan7)
    		out			ADC_ddr_b,temp0
    		ldi			temp0,(0<<Chan9|0<<Chan8|0<<Chan7)
    		out			ADC_ddr_b,temp0
    
    		in			temp0,adcsra
    		ori			temp0,(1<<ADEN|0<<ADSC|0<<ADFR|0<<ADIE|1<<ADPS2|0<<ADPS1|1<<ADPS0)	;	
    		out			adcsra,temp0
    	
    		rcall		adc_ref_5V
    
    		ret
    
    ;*********************AREF
    adc_ref_5V:			;AVCC on	
    		in			temp0,admux
    		andi		temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    
    adc_ref_extern:		;AREexternF	
    		in			temp0,admux
    		andi		temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		ori			temp0,(0<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    
    adc_ref_256V1:		;2,56V on
    		in			temp0,admux
    		andi		temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		ori			temp0,(1<<REFS1|0<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    
    adc_ref_256V2:		;extern on
    		in			temp0,admux
    		andi		temp0,(0<<REFS1|0<<REFS0|1<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		ori			temp0,(1<<REFS1|1<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	;AVCC with external capacitor at AREF pin
    		out			admux,temp0		
    		ret
    
    ;*******************Channels**************************************************************************************
    adc_chan_0:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_1:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_2:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|0<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_3:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|1<<MUX1|1<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_4:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|0<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_5:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|0<<MUX1|1<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_6:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_7:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|0<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_8:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_9:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|0<<MUX4|1<<MUX3|0<<MUX2|0<<MUX1|1<<MUX0)	
    		out			admux,temp0	
    		ret
    
    adc_chan_BG:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|0<<MUX0)
    		out			admux,temp0	
    		ret
    
    adc_chan_GND:
    		in			temp0,admux
    		andi		temp0,(1<<REFS1|1<<REFS0|1<<ADLAR|0<<MUX4|0<<MUX3|0<<MUX2|0<<MUX1|0<<MUX0)
    		ori			temp0,(0<<REFS1|0<<REFS0|0<<ADLAR|1<<MUX4|1<<MUX3|1<<MUX2|1<<MUX1|1<<MUX0)
    		out			admux,temp0	
    		ret

Ähnliche Themen

  1. Keine Anzeige bei 20*4 LCD-Display
    Von Funkpeter im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 15
    Letzter Beitrag: 19.10.2014, 13:19
  2. [ERLEDIGT] Atmega32 ==> Atmega1284p - keine Anzeige mehr im Display
    Von tc-maxx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 16.05.2011, 15:01
  3. RN-Control und GLCD mit Touch keine Anzeige
    Von MueThoS im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 9
    Letzter Beitrag: 19.03.2008, 18:53
  4. LED ANzeige
    Von markus1990 im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 04.03.2006, 02:28
  5. LED Anzeige
    Von Elektronikus im Forum Elektronik
    Antworten: 24
    Letzter Beitrag: 15.02.2005, 19:10

Berechtigungen

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

LiFePO4 Speicher Test