Witam . Zakładam temat gdyż chciałbym się dowiedzieć nieco na temat jaki próbuje zrealizować .
W założeniu mam zamiar napisać program do woltomierza . Bardziej mnie martwi transmisja danych przez usb do komputera (na razie chciałbym zapisywać pomiary do pliku txt ) .
Świecenie diodami na różne sposoby z przerywaniem i przyciskami mam już za sobą .Obecnie sprawdzam jak działa lcd , próbuję zgłębić tajniki wyświetlania łańcuchów i obsługę konwertera adc.
I pytania :
- Jak najprościej zorganizować transmisję danych ?
- Czy do zapisu na komputerze będzie niezbędne dodatkowe oprogramowanie ?
Oto moje postępy.
.include "m8def.inc"
LDI r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
ldi r16, $ff
out ddrd, r16
out ddrb, r16
;------ustawieniaLCD-----------------------
; 1DNF
rcall LCDsetupON
ldi r17,0b00110000 ;
out portd,r17 ;
rcall LCDsetupOFF ;
rcall czekaj ;
;------obsługa ---------------------------
; 1BCD
rcall LCDsetupON
ldi r17,0b00001111 ; D: Display On/Off
out portd,r17 ; C: Cursor On/Off.
rcall LCDsetupOFF ; B: Cursor blink on/off.
rcall czekaj
rcall czyszczenie
;-----------------------------------------
;------
start:
rcall czekaj
rcall czekaj
rcall LCDdataON
ldi r17, '<'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall LCDdataON
ldi r17, 'b'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall LCDdataON
ldi r17, 'a'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall czekaj
rcall czekaj
rcall wiersz2
rcall czekaj
rcall czekaj
rcall LCDdataON
ldi r17, 'a'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall czekaj
rcall wprawo
rcall wprawo
rcall wprawo
rcall wprawo
rcall wprawo
rcall wprawo
rcall czekaj
rcall czekaj
rcall czyszczenie
rjmp start
;-----przesuniecie-w-lewo-
wlewo:
rcall LCDsetupON
ldi r17,0b00011000
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;-----przesuniecie-w-prawo-
wprawo:
rcall LCDsetupON
ldi r17,0b00011100
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;-----wiersz2--------
wiersz2:
rcall LCDsetupON
ldi r17,0b11000000
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;-----czyszczenie----
czyszczenie:
rcall LCDsetupON
ldi r17,0b00000001
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;--------------------
;lcd rs rw e
; / 4 5 6 pin
;mega8 rs rw e
; / b0 b1 b2 pin
;--------------------
LCDsetupON: ;dla trybu transferu ustawień
ldi r16,0b00000100 ;RW -0
out portb,r16 ;RS -0
ret ;E -1
LCDsetupOFF:
ldi r16,0b00000000
out portb,r16
ret
;--------------------
;E 1 - transfer 0 -idle
;RW 0 - zapis 1- odczyt
;RS 0 - komendy; 1 - dane
;--------------------
LCDdataON: ;dla trybo transferu danych
ldi r16, 0b00000101 ;RW-0
out portb,r16 ;RS-1
ret ;E -1
LCDdataOFF:
ldi r16, 0b00000001
out portb,r16
ret
;------czekaj--------
czekaj:
;ldi r20,$ff
; czekaj2:
;ldi r21,$ff
; czekaj1:
; dec r21
; brne czekaj1
;dec r20
;brne czekaj2
ret
W założeniu mam zamiar napisać program do woltomierza . Bardziej mnie martwi transmisja danych przez usb do komputera (na razie chciałbym zapisywać pomiary do pliku txt ) .
Świecenie diodami na różne sposoby z przerywaniem i przyciskami mam już za sobą .Obecnie sprawdzam jak działa lcd , próbuję zgłębić tajniki wyświetlania łańcuchów i obsługę konwertera adc.
I pytania :
- Jak najprościej zorganizować transmisję danych ?
- Czy do zapisu na komputerze będzie niezbędne dodatkowe oprogramowanie ?
Oto moje postępy.
.include "m8def.inc"
LDI r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
ldi r16, $ff
out ddrd, r16
out ddrb, r16
;------ustawieniaLCD-----------------------
; 1DNF
rcall LCDsetupON
ldi r17,0b00110000 ;
out portd,r17 ;
rcall LCDsetupOFF ;
rcall czekaj ;
;------obsługa ---------------------------
; 1BCD
rcall LCDsetupON
ldi r17,0b00001111 ; D: Display On/Off
out portd,r17 ; C: Cursor On/Off.
rcall LCDsetupOFF ; B: Cursor blink on/off.
rcall czekaj
rcall czyszczenie
;-----------------------------------------
;------
start:
rcall czekaj
rcall czekaj
rcall LCDdataON
ldi r17, '<'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall LCDdataON
ldi r17, 'b'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall LCDdataON
ldi r17, 'a'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall czekaj
rcall czekaj
rcall wiersz2
rcall czekaj
rcall czekaj
rcall LCDdataON
ldi r17, 'a'
out portd,r17
rcall LCDdataOFF
rcall czekaj
rcall czekaj
rcall wprawo
rcall wprawo
rcall wprawo
rcall wprawo
rcall wprawo
rcall wprawo
rcall czekaj
rcall czekaj
rcall czyszczenie
rjmp start
;-----przesuniecie-w-lewo-
wlewo:
rcall LCDsetupON
ldi r17,0b00011000
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;-----przesuniecie-w-prawo-
wprawo:
rcall LCDsetupON
ldi r17,0b00011100
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;-----wiersz2--------
wiersz2:
rcall LCDsetupON
ldi r17,0b11000000
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;-----czyszczenie----
czyszczenie:
rcall LCDsetupON
ldi r17,0b00000001
out portd,r17
rcall LCDsetupOFF
rcall czekaj
ret
;--------------------
;lcd rs rw e
; / 4 5 6 pin
;mega8 rs rw e
; / b0 b1 b2 pin
;--------------------
LCDsetupON: ;dla trybu transferu ustawień
ldi r16,0b00000100 ;RW -0
out portb,r16 ;RS -0
ret ;E -1
LCDsetupOFF:
ldi r16,0b00000000
out portb,r16
ret
;--------------------
;E 1 - transfer 0 -idle
;RW 0 - zapis 1- odczyt
;RS 0 - komendy; 1 - dane
;--------------------
LCDdataON: ;dla trybo transferu danych
ldi r16, 0b00000101 ;RW-0
out portb,r16 ;RS-1
ret ;E -1
LCDdataOFF:
ldi r16, 0b00000001
out portb,r16
ret
;------czekaj--------
czekaj:
;ldi r20,$ff
; czekaj2:
;ldi r21,$ff
; czekaj1:
; dec r21
; brne czekaj1
;dec r20
;brne czekaj2
ret
