fram wrote:Salve, per il momento sto utilizzando una demo board la STK500. lo schema dell'ADC non mi carica il file cmq se può lo si osserva anche dal data sheet dell'atmega8535. il sensore di temperatura LM35 lo voglio mettere su ADC0 il sensore di temperatura mi deve dare 10mV/°C per farlo devo avere un guadagno x5, lo faccio all'esterno del microcontrollore , lo vorrei visualizzare su di un display 16x2, come posso fare per la visualizzazione?.
.nolist
.include "m8535def.inc"
.list
;--------------------------------------------------------------
.def temp = r16
;Interrupt vector table ---------------------------------------
.cseg
.org 0x00
rjmp RESET ; Reset Handler
reti ; IRQ0 Handler
reti ; IRQ1 Handler
reti ; Timer2 Compare Handler
reti ; Timer2 Overflow Handler
reti ; Timer1 Capture Handler
reti ; Timer1 Compare A Handler
reti ; Timer1 Compare B Handler
reti ; Timer1 Overflow Handler
reti ; Timer0 Overflow Handler
reti ; SPI Transfer Complete Handler
reti ; USART RX Complete Handler
reti ; UDR Empty Handler
reti ; USART TX Complete Handler
rjmp TX_USART ; ADC Conversion Complete Handler
reti ; EEPROM Ready Handler
reti ; Analog Comparator Handler
reti ; Two-wire Serial Interface Handler
reti ; IRQ2 Handler
reti ; Timer0 Compare Handler
reti ; Store Program Memory Ready Handler
;Main --------------------------------------------------------------
RESET:
;Initializzazione Stack Pointer
ldi temp,low(RAMEND);metto la parte finale dello stack pointer in temp
out SPL,temp ;metto temp in spl
ldi temp,high(RAMEND)
out SPH,temp
;###Clear registro###
clr temp
;###porte I/O###
;PortB è output
ser temp ;scrivo in temp 0b111111111
out DDRB, temp ;imposto la portaB come out
out PORTB, temp ;abilito la rete pull-up sulla portaB
;###USART setup###
sbi UCSRB, TXEN ;Abilito il trasmettitore di USART
ldi temp, 3<<UCSZ0 ;Carico in temp=00000110 per poi metterlo
out UCSRC, temp ;in UCSRC per avere 8 bit
clr temp
out UBRRH, temp ;setto la baud rate a 2,4kbps,con frequenza
ldi temp, 95 ;dell'oscillatore pari a 1,8432MHz (UBRR=95)
out UBRRL, temp
;###ADC setup###
sbi ADMUX, ADLAR;Setto l'ADC,Vrif=2,56,segnale analogico posto su ADC0
ldi temp, (1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2) ;Abilito l'ADC,
out ADCSRA, temp ;prescaling=16,abilito l'interrupt,auto-triggering (free-running)
sbi ADCSRA, ADSC ;Start of conversion (first sample)
sei ;Abilito il Global interrupt
Loop:
rjmp loop
TX_USART:
in temp, ADCH ;Prendo il risultato in ADCH e lo metto in temp
out PORTB, temp;Pongo il risultato di temp in out PORTB
;polling UDRE
sbis UCSRA, UDRE
rjmp TX_USART
out UDR, temp
;clear ADIF flag (with 1L)
;sbi ADCSRA, ADIF
reti
ISR_ADC:
in save_sreg,sreg ;Save Status register
;Do something here
out sreg,save_sreg ;Restore Status register
reti
;----Volt_d = Volt mod 10
lds zl,volt
push zl
ldi zl,Low(10)
pop r24
call Div8u
mov zl,r22
sts volt_d,zl
;----8/8 unsigned division
Div8u: Sub r22,r22
ldi r23,0x09
rjmp Div81
Div80: rol r22
cp r22,zl
brcs Div81
Sub r22,zl
Div81: rol r24
dec r23
brne Div80
Com r24
mov zl,r24
ret
Hai provato rcall Div8u? Non penso che call esiste nel 8535."call Div8u" mi dice carattere non valido.
Return to Microcontrollori e microprocessori
Users browsing this forum: No registered users and 1 guest