Chupo
2016-10-12 02:58:15 UTC
Napravio sam uredjaj s mikrokontrolerom koji komande koje primi preko
RS232 porta (UART) pomocu NRF24L01+ salje na drugu lokaciju a nakon
potvrde prijema ili izgubljenog paketa preko RS232 vraca ili string
'Ack' ili 'Err'.
Najprije sam komunikaciju debuggirao na PC-u s Hyperterminalom a sad
sam uredjaj spojio s Raspberry Pi-om tako da dalje moram koristiti
Linux pa umjesto Hyperterminala sad dalje koristim Screen:
https://www.gnu.org/software/screen/manual/screen.html
kojeg pokrecem s:
screen /dev/ttyUSB0 2400
(USB --> RS232 adapter, bitrate 2400 baud)
kako je to objasnjeno na:
https://www.gnu.org/software/screen/manual/screen.html#Window-Types
Iako to (kao i u Hyperterminalu) radi OK, ne razumijem recenice u man-u
koje kazu:
Screen has built in some functionality of 'cu' and 'telnet'.
This window type is similar to 'screen cu -l /dev/ttya'.
Zna netko na sta se odnosi 'cu' i sta to predstavlja u liniji s kojom
se poziva screen - nije switch a 'cu' nema niti na popisu komandi :-/
I jos jedna stvar - ako netko vidi u cemu je greska. Iako ova testna
Python skripta ispravno salje komande koje se na udaljenom mjestu
izvrse, program ispise samo jedan od dva 'Ack' stringa:
#!/usr/bin/env python
import time
import serial
rs232 = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 2400,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout = 1
)
rs232.write('t 19 45\n')
time.sleep(2) # debug
print(rs232.readline())
rs232.write('r 1\n')
time.sleep(2) # debug
print(rs232.readline())
Pretpostavljam da je neki problem s RS232 input buffer-om. Kao \n
mikrokontroler natrag salje 0x0d 0x0a (\r\n) i u Hyperterminalu i
Screen-u se sve prikazuje ispravno ali u ovom programu prvi print
ispise samo prazni red a drugi ispise Ack. Medjutim, ako zakomentiram
prvi print onda drugi ispise samo prazni red tako da skripta onda uopce
ne ispise nijedan 'Ack' string.
Sigurno je neka bezvezna greska koja mi ne pada na pamet, probao sam i
s flushInput() i s dodavanjem dodatnih print komandi, ali ne mogu
pronaci gdje je problem :-/
Komunikacija znaci radi OK, na udaljenoj lokaciji se desava sve sta se
posalje i mikrokontroler na prijemu 100% dva puta posalje string 'Ack'
a ako na kraju dodam slanje jos jedne komande i ispis povratne
informacije onda se prikaze samo drugi Ack a umjesto prvog i zadnjeg se
ispise samo novi red.
RS232 porta (UART) pomocu NRF24L01+ salje na drugu lokaciju a nakon
potvrde prijema ili izgubljenog paketa preko RS232 vraca ili string
'Ack' ili 'Err'.
Najprije sam komunikaciju debuggirao na PC-u s Hyperterminalom a sad
sam uredjaj spojio s Raspberry Pi-om tako da dalje moram koristiti
Linux pa umjesto Hyperterminala sad dalje koristim Screen:
https://www.gnu.org/software/screen/manual/screen.html
kojeg pokrecem s:
screen /dev/ttyUSB0 2400
(USB --> RS232 adapter, bitrate 2400 baud)
kako je to objasnjeno na:
https://www.gnu.org/software/screen/manual/screen.html#Window-Types
Iako to (kao i u Hyperterminalu) radi OK, ne razumijem recenice u man-u
koje kazu:
Screen has built in some functionality of 'cu' and 'telnet'.
This window type is similar to 'screen cu -l /dev/ttya'.
Zna netko na sta se odnosi 'cu' i sta to predstavlja u liniji s kojom
se poziva screen - nije switch a 'cu' nema niti na popisu komandi :-/
I jos jedna stvar - ako netko vidi u cemu je greska. Iako ova testna
Python skripta ispravno salje komande koje se na udaljenom mjestu
izvrse, program ispise samo jedan od dva 'Ack' stringa:
#!/usr/bin/env python
import time
import serial
rs232 = serial.Serial(
port = '/dev/ttyUSB0',
baudrate = 2400,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS,
timeout = 1
)
rs232.write('t 19 45\n')
time.sleep(2) # debug
print(rs232.readline())
rs232.write('r 1\n')
time.sleep(2) # debug
print(rs232.readline())
Pretpostavljam da je neki problem s RS232 input buffer-om. Kao \n
mikrokontroler natrag salje 0x0d 0x0a (\r\n) i u Hyperterminalu i
Screen-u se sve prikazuje ispravno ali u ovom programu prvi print
ispise samo prazni red a drugi ispise Ack. Medjutim, ako zakomentiram
prvi print onda drugi ispise samo prazni red tako da skripta onda uopce
ne ispise nijedan 'Ack' string.
Sigurno je neka bezvezna greska koja mi ne pada na pamet, probao sam i
s flushInput() i s dodavanjem dodatnih print komandi, ali ne mogu
pronaci gdje je problem :-/
Komunikacija znaci radi OK, na udaljenoj lokaciji se desava sve sta se
posalje i mikrokontroler na prijemu 100% dva puta posalje string 'Ack'
a ako na kraju dodam slanje jos jedne komande i ispis povratne
informacije onda se prikaze samo drugi Ack a umjesto prvog i zadnjeg se
ispise samo novi red.
--
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver
Chupo
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver
Chupo