Witam,
chcialbym w Bascomie wykonac konfiguracje USART w zaleznosci od pinow procesora. O ile z zmiana baud nie ma problemu:
to bez powodzenia idzie(w zasadzie to nie idzie) z zmiana parzystości. Aktualnie mam to zrobione w ten sposób i nie działa to:
Sprawdzałem inne piny procesora. W warunku parity 0/1 wstawiałem zmiany innej zmiennej dla pewności i była reakcja na zmianę pinu, a wiec to kwestia programu i konfiguracji rejestrów. O konfiguracji w dokumentacji atmegi8 nic ciekawego nie mogę doczytać (możne pomijam coś istotnego, albo robię coś w nie takiej kolejności).
Generalnie w pozycji Parity=0 nie działa w ogóle.
Gdy Parity=1 (else) to działa gdy master (PC i terminal w postaci programu Docklight) wysyła Dane z Parity=None i Parity-Even (bez względu na położenie pinu parity)
Dane jakie wysyłam to 2 ramki MODBUS RTU:
Gdy wszystko dziala to dostaje takie odpowiedzi (na czerwono)...:
Proszę o pomoc. Czy w ogóle jest możliwa taka zmiana parzystości w locie, czy w trakcie trwania programu? Wydaje mi się ze powinno być to możliwe, ale albo o czymś zapominam albo coś pominąłem.
EDIT...jest postęp...zapomniałem ustawiać bitu USRRC.7. Zgodnie z pdf:
Teraz procesor odbiera dane w obu przypadkach, czyli obojętnie czy wyślę mu dane z "none, 2x stop" czy "even, 1x stop" to odbiera dane dla obu pozycji pinu, a więc jeszcze coś jest nie tak.
Przecież gdy odbiera dane "even, 1x stop", a ma ustawione na "none, 2x stop" to powinien odrzucać te dane? I odwrotnie: jak ma ustawione "none, 2x stop" , a odbiera even, 1x stop" to także jest konflikt i procesor nie powinien rozpoznawać ramek, a rozpoznaje i odsyła poprawne odpowiedzi.
Tak teraz wygląda konfiguracja:
Co tu nie gra?
EDIT.....Chyba już wiem...jeśli ktoś może potwierdzić to poproszę.
A wiec drugi bit stopu jest pomijany przed odbiornik (pdf strona 143:
A pytanie inne...jak realizujecie to sprawdzanie parzystości w przypadku MODBUS RTU?
chcialbym w Bascomie wykonac konfiguracje USART w zaleznosci od pinow procesora. O ile z zmiana baud nie ma problemu:
Kod: text
Kod: text
Generalnie w pozycji Parity=0 nie działa w ogóle.
Gdy Parity=1 (else) to działa gdy master (PC i terminal w postaci programu Docklight) wysyła Dane z Parity=None i Parity-Even (bez względu na położenie pinu parity)
Dane jakie wysyłam to 2 ramki MODBUS RTU:
Gdy wszystko dziala to dostaje takie odpowiedzi (na czerwono)...:
Proszę o pomoc. Czy w ogóle jest możliwa taka zmiana parzystości w locie, czy w trakcie trwania programu? Wydaje mi się ze powinno być to możliwe, ale albo o czymś zapominam albo coś pominąłem.
EDIT...jest postęp...zapomniałem ustawiać bitu USRRC.7. Zgodnie z pdf:
Cytat:Bit 7 – URSEL: Register Select
This bit selects between accessing the UCSRC or the UBRRH Register. It is read
one when reading UCSRC. The URSEL must be one when writing the UCSRC.
Teraz procesor odbiera dane w obu przypadkach, czyli obojętnie czy wyślę mu dane z "none, 2x stop" czy "even, 1x stop" to odbiera dane dla obu pozycji pinu, a więc jeszcze coś jest nie tak.
Przecież gdy odbiera dane "even, 1x stop", a ma ustawione na "none, 2x stop" to powinien odrzucać te dane? I odwrotnie: jak ma ustawione "none, 2x stop" , a odbiera even, 1x stop" to także jest konflikt i procesor nie powinien rozpoznawać ramek, a rozpoznaje i odsyła poprawne odpowiedzi.
Tak teraz wygląda konfiguracja:
Kod: text
Co tu nie gra?
EDIT.....Chyba już wiem...jeśli ktoś może potwierdzić to poproszę.
A wiec drugi bit stopu jest pomijany przed odbiornik (pdf strona 143:
Cytat:), a w przypadku konieczności sprawdzania parzystości trzeba osobno sprawdzać bit PE i w zależności od jego wartości odrzucać lub przyjmować przychodzące do odbiornika bajty (pdf strona 147:A second stop bit will be
ignored by the Receiver. When the first stop bit is received (i.e., a complete serial frame
is present in the Receive Shift Register), the contents of the Shift Register will be moved
into the receive buffer
Cytat:.When
enabled, the Parity Checker calculates the parity of the data bits in incoming frames and
compares the result with the parity bit from the serial frame. The result of the check is
stored in the receive buffer together with the received data and stop bits. The Parity
Error (PE) Flag can then be read by software to check if the frame had a parity error.
The PE bit is set if the next character that can be read from the receive buffer had a par-
ity error when received and the parity checking was enabled at that point (UPM1 = 1).
This bit is valid until the receive buffer (UDR) is read.)
A pytanie inne...jak realizujecie to sprawdzanie parzystości w przypadku MODBUS RTU?