Salve, sono nuovo del forum, un saluto a tutti.
Ho letto la discussione e purtroppo non sono riuscito a venire a capo del mio problema.
Sto usando la scheda STK500 con AVRStudio7, premesso questo praticamente nel momento in cui provo il codice sul controllore atmega8535, con collegato al piedino PA0 (ADC0) il sensore LM35, in uscita, su PORTC (che sarà la porta del LCD) e che momentaneamente collegata agli 8 led che si trovano sulla scheda, non ho alcuna variazione dei led (che dovrebbero rappresentare il binario del valore di temperatura approssimato all'unità). A prescindere se la configurazione mi dava un risultato esatto o meno, il punto è che almeno qualcosa sulla porta a mio avviso doveva uscire dalla conversione;
posto il mio codice che simula un main dove aspetto 10 ms, richiamo la macro "rilevatemp"
alla fine di questo processo dovrei avere in "data_lcd" il valore della conversione per poi dopo 2 secondi mandarlo su PORTC;
- Code: Select all
.include "init_lcd.inc"
.include "wait.inc"
.include "wait_1ms.inc"
.include "stampa.inc"
.include "wait_for.inc"
.DEF tmp=r16
.DEF varCont=r17
.DEF data_lcd=r18
.EQU size=16
.EQU E= PORTA7
.EQU RS= PORTA6
.EQU RW= PORTA5
.CSEG
.ORG $0000 rjmp START ; Reset Handler
.ORG INT0addr reti ; jmp EXT_INT0 ; IRQ0 Handler
.ORG INT1addr reti ; jmp EXT_INT1 ; IRQ1 Handler
.ORG OC2addr reti ; jmp TIM2_COMP ; Timer2 Compare Handler
.ORG OVF2addr reti ; jmp TIM2_OVF ; Timer2 Overflow Handler
.ORG ICP1addr reti ; jmp TIM1_CAPT ; Timer1 Capture Handler
.ORG OC1Aaddr reti ; jmp TIM1_COMPA ; Timer1 CompareA Handler
.ORG OC1Baddr reti ; jmp TIM1_COMPB ; Timer1 CompareB Handler
.ORG OVF1addr reti ; jmp TIM1_OVF ; Timer1 Overflow Handler
.ORG OVF0addr reti ; jmp TIM0_OVF ; Timer0 Overflow Handler
.ORG SPIaddr reti ; jmp SPI_STC ; SPI Transfer Complete Handler
.ORG URXCaddr reti ; jmp USART_RXC ; USART RX Complete Handler
.ORG UDREaddr reti ; jmp USART_UDRE ; UDR Empty Handler
.ORG UTXCaddr reti ; jmp USART_TXC ; USART TX Complete Handler
.ORG ADCCaddr rjmp ADC_complete ; ADC Conversion Complete Handler
.ORG ERDYaddr reti ; jmp EE_RDY ; EEPROM Ready Handler
.ORG ACIaddr reti ; jmp ANA_COMP ; Analog Comparator Handler
.ORG TWIaddr reti ; jmp TWSI ; Two-wire Serial Interface Handler
.ORG INT2addr reti ; jmp EXT_INT2 ; IRQ2 Handler
.ORG OC0addr rjmp TIM0_COMP ; Timer0 Compare Handler
.ORG SPMRaddr reti ; jmp SPM_RDY ; Store Program Memory Ready Handler
.org INT_VECTORS_SIZE
msg0: .db "WELCOME",0
msg1: .db "ATMEL-MONITORING SYSTEM",0
start:
INIT_SP:
ldi tmp,low(ramend)
out SPL,TMP
ldi tmp,high(ramend)
out SPH,tmp
INIT_IO:
ldi tmp,0xff
out DDRC,tmp ;imposto portC come output, 0-7 bit data LCD
ldi tmp,0xE0
out DDRA,tmp;imposto i piedini di uscita per E,RS,RW,
INIT_TimerCounter0:
;inizializzo TimerCounter0,CTC_normal_mode_OC0-Disconnected,(inizialmente off_no clock source)
ldi tmp,(1<<WGM01)|(0<<WGM00)|(0<<COM00)|(0<<COM01)|(0<<CS00)|(0<<CS01)|(0<<CS02)
out TCCR0,tmp
ldi tmp,0xFF
out OCR0,tmp;inizialmente il valore di OCR0 sara pari a max
init_ADC:
ldi tmp, (1<<REFS1)|(1<<REFS0)|(1<<ADLAR);internal 2,56 vref, aggiustamento a sinistra;dovrò leggere solo ADCH
out ADMUX,tmp
ldi tmp, (1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(0<<ADIE)|(1<<ADPS1)|(1<<ADPS0);ADIE clred, interrupt disable ADC_complete, 125kHz ADC
out ADCSRA,tmp
sei ;enableglobalinterrupts
;inizializzo LCD
;init_lcd
;stampa,msg0
main:
wait_for,0,10 ;ripetizioni x*y;tempo base 1ms (quando un parametro è 0 conta l'altro)
rcall rilevatemp
wait_for,100,20 ;attendo 2s
out PORTC,data_lcd; valore in uscita
rjmp main
rilevaTemp:
ldi tmp, (1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADIE)|(1<<ADPS1)|(1<<ADPS0);avvio conv. con ADSC e abilito ADIE interr.
out ADCSRA,tmp
ret
;INTERRUPTS
ADC_complete:
;in data_lcd,ADCL
in data_lcd,ADCH
ldi tmp,(0<<ADIE);disabilito interrupt
out ADCSRA,tmp
reti
TIM0_COMP:
ldi varcont,0
reti