Ok idemo onda redom...dakle prvo treba da postavim na MCU ulazni i izlazne pinove sto sam uradio pomocu ove naredbe:
; DDRB - Segment Multiplexing Output (0, 1, 2) | MAX6675 CS(MOSI), SCK(SCK) Output, SO(MISO) Input (3 5 4)
ldi R16, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<5)
out DDRB, R16
Dakle MAX6675 je spojeni na MCU: CS => MOSI, SCK => SCK podeseni kao output i SO => MISO kao ulazni port.
Zatim trebam da omogucim SPI na MCU:
; Spi Init - Enable SPI On MCU
ldi R16, (1<<SPE)|(1<<MSTR)|(1<<SPR0) ; Spi Master, Prescaler fck/16
out SPCR, R16
Zatim u Loop Glavnom programu postavljam CS LOW (jer tako se enabla MAX da pocinje da prima clockove):
cbi PORTB,3 ; CS Low
I onda upisujem u registar SPDR 0x08 (to ce mi biti dummy byte) i onda posaljem to na SPDR sljedecim kodom:
ldi R20, 0x08 ; Dummy Byte
out SPDR, R20 ; Send Dummy Byte
I nakon toga citam vrijednost iz SPSR registra i provjeravam dali mi je flag SPIF postavljen na 1 ukoliko je u registru R20 mi se nalazi vrijednost koju sam precitao preko SPI, i nakon toga opet se vraca na funkciju Read_Temp i tako u loop...
Read_Temp:
in R20, SPSR ; Read Data
sbrs R20, SPIF
rjmp Read_Temp
Znaci po ovim upustvima treba da poslije sbrs R20, SPIF stavim pomocnog brojaca koji ce da mi izbroji da se 8 puta izvrtjela petlja i nakon toga ucitam iz SPIF registra u LOW i HIGH X registar i dalje ide matematika za racunanje napona u temperaturu jeli tako treba da bude?
Na ovoj stranici procitani SPI je samo autor pomnozio sa rezolucijom temperature i dobio temperaturu tj SPI data x 0,25C
gist.github.com/sleemanj/059fce7f1b8087edfe7d7ef845a5d881
; DDRB - Segment Multiplexing Output (0, 1, 2) | MAX6675 CS(MOSI), SCK(SCK) Output, SO(MISO) Input (3 5 4)
ldi R16, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<5)
out DDRB, R16
Dakle MAX6675 je spojeni na MCU: CS => MOSI, SCK => SCK podeseni kao output i SO => MISO kao ulazni port.
Zatim trebam da omogucim SPI na MCU:
; Spi Init - Enable SPI On MCU
ldi R16, (1<<SPE)|(1<<MSTR)|(1<<SPR0) ; Spi Master, Prescaler fck/16
out SPCR, R16
Zatim u Loop Glavnom programu postavljam CS LOW (jer tako se enabla MAX da pocinje da prima clockove):
cbi PORTB,3 ; CS Low
I onda upisujem u registar SPDR 0x08 (to ce mi biti dummy byte) i onda posaljem to na SPDR sljedecim kodom:
ldi R20, 0x08 ; Dummy Byte
out SPDR, R20 ; Send Dummy Byte
I nakon toga citam vrijednost iz SPSR registra i provjeravam dali mi je flag SPIF postavljen na 1 ukoliko je u registru R20 mi se nalazi vrijednost koju sam precitao preko SPI, i nakon toga opet se vraca na funkciju Read_Temp i tako u loop...
Read_Temp:
in R20, SPSR ; Read Data
sbrs R20, SPIF
rjmp Read_Temp
Znaci po ovim upustvima treba da poslije sbrs R20, SPIF stavim pomocnog brojaca koji ce da mi izbroji da se 8 puta izvrtjela petlja i nakon toga ucitam iz SPIF registra u LOW i HIGH X registar i dalje ide matematika za racunanje napona u temperaturu jeli tako treba da bude?
Na ovoj stranici procitani SPI je samo autor pomnozio sa rezolucijom temperature i dobio temperaturu tj SPI data x 0,25C
gist.github.com/sleemanj/059fce7f1b8087edfe7d7ef845a5d881