Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięKomunikacja przez uart problem
Moderatorzy:Jacek Bogusz, procesorowiec, r-mik, Moderatorzy
Najlepszym rozwiązaniem będą modemy radiowe z Uart które są przeźroczyste czyli nic nie dodają do transmisji co weszło to i wychodzi np coś takiego :http://en.51sunray.com/products_list/&p ... 90570.html
Ja od nich kupowałem parę lat temu.
Jeśli kupisz od nich możesz spodziewać się telefonów po 5 rano będą się pytać jak się masz i czy nie chcesz kupić więcej.
A reszta w bascomie jest już prosta pamiętasz ten kod z paczka danych jako tablicą?
Zwyczajnie musisz dodać tylko parę bytów na dodatkowe dane i i pierwsze okno niech np będzie to adres
teraz każdy moduł będzie miał przypisany swój adres.
Teraz x twoich modułów będzie odbierało dane od mastera i w zależności czy adres będzie się zgadzał będzie wykorzystywał przesłane dane z dalszych okienek ramki albo nie.
w ten sam sposób musisz dopisać odbieranie danych od slave żeby slave nie wysyłały danych nieproszone.
Polecam jeszcze jedną firmę http://www.kingbirdnet.com
Mają ciut lepsze modemy nie wiem co jest nie tak z linkiem nie zawsze działa.
Ale mam tez do nich skypa jak by co.
Ja od nich kupowałem parę lat temu.
Jeśli kupisz od nich możesz spodziewać się telefonów po 5 rano będą się pytać jak się masz i czy nie chcesz kupić więcej.
A reszta w bascomie jest już prosta pamiętasz ten kod z paczka danych jako tablicą?
Zwyczajnie musisz dodać tylko parę bytów na dodatkowe dane i i pierwsze okno niech np będzie to adres
teraz każdy moduł będzie miał przypisany swój adres.
Teraz x twoich modułów będzie odbierało dane od mastera i w zależności czy adres będzie się zgadzał będzie wykorzystywał przesłane dane z dalszych okienek ramki albo nie.
w ten sam sposób musisz dopisać odbieranie danych od slave żeby slave nie wysyłały danych nieproszone.
Polecam jeszcze jedną firmę http://www.kingbirdnet.com
Mają ciut lepsze modemy nie wiem co jest nie tak z linkiem nie zawsze działa.
Ale mam tez do nich skypa jak by co.
Re: Komunikacja przez uart problem
No z tego co piszesz to taki moduł byłby idealny dla mnie tylko nie moge zobaczyć jak one wyglądają bo linki nie działają niestety.
Re: Komunikacja przez uart problem
http://en.51sunray.com/products_list/&p ... 90570.html
Link pierwszy działa
Link drugi też działa.
http://www.jizhuo.com/En/products.aspx? ... &CateID=40
Polecam te z drugiego linku bo są lepsze, możesz np ustawić inna prędkość transmisji w powietrzu tzn miedzy modemami, a inną między modemem a urządzeniem.
Ja np używam JZ873 500mW na 868 Mhz do programowania systemów alarmowych w dużych obiektach.
Nie trzeba siedzieć z laptopem przy centrali można latać po całym budynku w zależności od potrzeb.
Link pierwszy działa
Link drugi też działa.
http://www.jizhuo.com/En/products.aspx? ... &CateID=40
Polecam te z drugiego linku bo są lepsze, możesz np ustawić inna prędkość transmisji w powietrzu tzn miedzy modemami, a inną między modemem a urządzeniem.
Ja np używam JZ873 500mW na 868 Mhz do programowania systemów alarmowych w dużych obiektach.
Nie trzeba siedzieć z laptopem przy centrali można latać po całym budynku w zależności od potrzeb.
Re: Komunikacja przez uart problem
No teraz działają linki.
Fajne są te moduły i bardzo interesujące ,a jest jakiś polski sklep internetowy oferujący te moduły?
A mam pytanie mam procesor ATMEGA644P jak wjadomo ma on dwa sprzetowe uarty i ja chcę oba wykorzystać problem w tym że jak korzystam z obydwu do program przy prubje pobrania danych zawiesza się poznaje to po tym gdyż jeśli w buforze odbiorczym jest jakiś znak to zapala mi się LED.
Przy prawidłowej transmisji ta dioda miga na ułamek sekundy się zapala i gaśnie.
A gdy włącze 2 uart to dioda świeci ciągle i program się zawiesza jak korzystam z jednego uarta to działa wszystko dobrze w czym tkwi problem?
Dodam fragment kodu:
Fajne są te moduły i bardzo interesujące ,a jest jakiś polski sklep internetowy oferujący te moduły?
A mam pytanie mam procesor ATMEGA644P jak wjadomo ma on dwa sprzetowe uarty i ja chcę oba wykorzystać problem w tym że jak korzystam z obydwu do program przy prubje pobrania danych zawiesza się poznaje to po tym gdyż jeśli w buforze odbiorczym jest jakiś znak to zapala mi się LED.
Przy prawidłowej transmisji ta dioda miga na ułamek sekundy się zapala i gaśnie.
A gdy włącze 2 uart to dioda świeci ciągle i program się zawiesza jak korzystam z jednego uarta to działa wszystko dobrze w czym tkwi problem?
Dodam fragment kodu:
Kod: Zaznacz cały
$regfile = "m644pdef.dat"
$crystal = 8000000
$baud = 19200
$baud1 = 19200
'=========================================================Zmienne panela urzytkownika========================================
Dim Panel As Byte , Wybur_funkcji As Byte , Plywaj As Byte
'=================================================================Zmienne czasu==============================================
Dim Co2s As Bit , Pomiar_temperatury As Bit
'=============================================================Zmienne napięcia sieci=========================================
Dim L1 As Word , L2 As Word , L3 As Word , Lv1 As Single , Lv2 As Single , Lv3 As Single
Dim Lvv1 As String * 6 , Lvv2 As String * 6 , Lvv3 As String * 6
'==========================================================Zmienne napięcia akumulatora======================================
Dim Akumulator_napiecie As Word , Akumulator_napiecie_v As Single , A_n_vv As String * 5
'===========================================================Zmienne temperatury modułu=======================================
Dim Temperatura As Integer , Temperatura_dla_wentylatora As Byte
Dim Temperatura_single1 As Single , Temperatura_single2 As Single
Dim Temperatura_single1_format As String * 4 , Temperatura_single2_format As String * 4
'======================================================================Wentylator============================================
Dim Went_szybkosc As Byte
'==========================================================Czas włączanie led-ów w kuchni====================================
Dim Gg_ledkh_on As Byte , Gg_ledkh_off As Byte , Mm_ledkh_on As Byte , Mm_ledkh_off As Byte
'=========================================================Czas włączania led-ów w pokoju 1===================================
Dim Gg_led1_on As Byte , Gg_led1_off As Byte , Mm_led1_on As Byte , Mm_led1_off As Byte
'=========================================================Czas włączania led-ów w pokoju 2===================================
Dim Gg_led2_on As Byte , Gg_led2_off As Byte , Mm_led2_on As Byte , Mm_led2_off As Byte
'====================================================================UART====================================================
Dim Paczkadanych_0(9) As Byte , Paczkadanych_in_0(4) As Byte , Paczkadanych_in_1(4)as Byte , Serial_flaga_0 As Byte
Dim Serial_flaga_1 As Byte , Paczkadanych_1(9) As Byte
'=====================================================================SPI====================================================
Dim Paczkadanych_spi_in(4) As Byte , Paczkadanych_spi_out(9) As Byte
'====================================================================Błędy===================================================
Dim Bledy As Byte , Bledy_0 As Byte , Bledy_1 As Byte
'=========================================================Prąd ledów i temperatura kuchni====================================
Dim T_kuchni As Byte , Led_kh_a As Byte , Led_kh_b As Byte
'=========================================================Prąd ledów i temperatura 1pokoju===================================
Dim Led_a1 As Byte , Led_b1 As Byte , T_pokoju_1 As Byte
'=========================================================Prad ledów i temperatura 2pokoju===================================
Dim Led_a2 As Byte , Led_b2 As Byte , T_pokoju_2 As Byte
'=========================================================Zmienna jasności i włączenia ledów=================================
Dim Wlacz_led_kuchni As Bit , Wlacz_led_pokoju_1 As Bit , Wlacz_led_pokoju_2 As Bit , Jasnosc As Byte
Dim Jasnosc_1 As Byte , Jasnosc_2 As Byte
'================================================================Zmienna dni tygodnia========================================
Dim Dzien_tygodnia As Byte
'===========================================================Średnia temperatura w domu=======================================
Dim Temperatura_srednia As Single , Temperatura_srednia_mn As Single
Dim Temperatura_srednia_st As String * 4
'===============================================================Termostat pokojowy===========================================
Dim Termostat_pokojowy As Single , Termostat_pokojowy_byte As Byte , Termostat_pokojowy_format As String * 4
Dim Histereza As Byte , Termostat_pokojowy_u As Single
'================================================================Zmienne pomocnicza =========================================
Dim Zm_bcd_pomoc As Byte , Suma_pradow As Integer , Suma_pradow_1 As Byte , Suma_pradow_2 As Byte
'=========================================================Zmienne aktualnego czasu i daty====================================
Dim Ss As Byte , Mm As Byte , Gg As Byte , Dni As Byte , Mie As Byte , Rok As Byte
Dim Zezw_wysw As Bit , Dni_dane As Byte , Rok_przestepny_licznik As Byte , Rok_przestepny As Bit
'===============================================================Deklaracje aliasów===========================================
Bufor_odbiorczy_uart_0 Alias Porta.0
Bufor_odbiorczy_uart_1 Alias Porta.1
Spi_in Alias Porta.2
Impulsy_zegara Alias Portc.2
Wylacznik_12v Alias Portc.4
Piec_co Alias Portd.6
'==================================================================Konfiguracje==============================================
Config Lcd = 20 * 4
Config Scl = Portb.2
Config Sda = Portc.5
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
Config Spi = Soft , Din = Pinc.3 , Dout = Pinc.0 , Ss = None , Clock = Pinc.1
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 40
Config Serialin1 = Buffered , Size = 40
Config Serialout = Buffered , Size = 90
Config Serialout1 = Buffered , Size = 90
Config Watchdog = 2048
Config Porta.0 = Output
Porta.0 = 1
Config Porta.1 = Output
Porta.1 = 1
Config Porta.2 = Output
Porta.2 = 1
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Portc.2 = 0
Config Portc.3 = Input
Config Portc.4 = Output
Portc.4 = 0
Config Portd.6 = Output
Portd.6 = 0
'==============================================================Konfiguracje timerów==========================================
Config Timer1 = Pwm , Prescale = 64 , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Timer2 = Timer , Async = On , Prescale = 64
'======================================================Włącz przerwania zewnętrzne i od timerów==============================
On Timer1 : On Timer2 Co500ms
'===================================Włącz globalny system przerwań i przerwania zewnętrzne oraz od uarta i spi===============
Enable Interrupts : Enable Spi : Enable Urxc : Enable Urxc1 : Enable Utxc : Enable Utxc1
'=========================================================Konfiguracje przetwornika ADC======================================
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'=================================================Początkowe wartości wpisane po starcie procesora===========================
Wybur_funkcji = 0 : Panel = 255 : Gg_led1_on = 0 : Gg_led1_off = 0
Mm_led1_on = 0 : Mm_led1_off = 0 : Gg_led2_on = 0 : Gg_led2_off = 0 : Mm_led2_on = 0 : Mm_led2_off = 0 : Gg_ledkh_on = 0
Gg_ledkh_off = 0 : Mm_ledkh_on = 0 : Mm_ledkh_off = 0 : Wlacz_led_pokoju_1 = 0 : Wlacz_led_pokoju_2 = 0 : Jasnosc = 1
Wlacz_led_kuchni = 0 : Zezw_wysw = 1 : Termostat_pokojowy_byte = 180
Co2s = 0 : Dzien_tygodnia = 0 : Termostat_pokojowy_byte = 180 : Pwm1a = 80 : Bledy = 0
'==============================================================Powitanie i test==============================================
Reset Bufor_odbiorczy_uart_0
Wait 1
Set Bufor_odbiorczy_uart_0
Wait 1
Reset Bufor_odbiorczy_uart_1
Wait 1
Set Bufor_odbiorczy_uart_1
Wait 1
Reset Spi_in
Wait 1
Set Spi_in
Wait 1
Set Wylacznik_12v
Wait 1
Reset Wylacznik_12v
Wait 1
Cls
Locate 1 , 4
Lcd "Domowy system"
Locate 2 , 4
Lcd "sterowania i"
Locate 3 , 5
Lcd "komunikacji"
Locate 4 , 6
Lcd "INFO DOM"
Wait 5 'zaczekaj a potem przejdz do programu głównego
Cls 'wyczyść wyświetlacz
Start Watchdog 'uruchom watchdoga
Enable Timer2 'uruchom przerwania od timera2
'=========================================================Pętla nieskończona programu========================================
Do
Spiinit 'inicjalizacja interfejsu spi
Bledy = Bledy_0
Bledy = Bledy_1
If Rok_przestepny_licznik = 4 Then 'dopasowanie danych dni miesiąca do roku przestępnego
Rok_przestepny_licznik = 0
End If
If Rok_przestepny_licznik = 0 Then Rok_przestepny = 0 'licznik roku przestępnego
If Rok_przestepny_licznik > 0 Then Rok_przestepny = 1
If Co2s = 0 Then 'początek instrukcji warunkowej co2s
Config 1wire = Pinb.3 'konfiguruj interfejs 1wire do pracy z czunikem w skrzynce
If Pomiar_temperatury = 0 Then 'poczontek instrukcji warunkowej pomiar temperatury
1wreset
1wwrite &HCC
1wwrite &H44
Else 'gdy pomiar temperatury = 1
1wreset
1wwrite &HCC
1wwrite &HBE
Temperatura = 1wread(2)
If Err = 1 Then : Bledy = 50 : Else : Bledy = 0 : End If
Temperatura = Temperatura Or 65536 'uzupełnij liczbę gdy temperatura ujemna
Temperatura_single2 = Temperatura / 16
End If 'koniec instrukcji warunkowej pomiar temperatury
Open "com1:" For Binary As #1
Serial_flaga_0 = Ischarwaiting(#1)
If Serial_flaga_0 = 1 Then
Bufor_odbiorczy_uart_0 = 0
Inputbin #1 , Paczkadanych_in_0(1) , 4
Led_a2 = Paczkadanych_in_0(1) , 1
Led_b2 = Paczkadanych_in_0(2) , 1
T_pokoju_2 = Paczkadanych_in_0(3) , 1
Bledy_0 = Paczkadanych_in_0(4) , 1
Else
Bufor_odbiorczy_uart_0 = 1
End If
If Bledy_0 > 10 Or Wlacz_led_pokoju_2 = 1 Then 'początek instrukcji warunkowej gdy błędy > 10 i błędy < 50
Paczkadanych_0(1) , 1 = Ss
Paczkadanych_0(2) , 1 = Mm
Paczkadanych_0(3) , 1 = Gg
Paczkadanych_0(4) , 1 = Dni
Paczkadanych_0(5) , 1 = Mie
Paczkadanych_0(6) , 1 = Rok
Paczkadanych_0(7) , 1 = Dzien_tygodnia
Paczkadanych_0(8) , 1 = Jasnosc_2
Paczkadanych_0(9) , 1 = Jasnosc_2
Printbin #1 , Paczkadanych_0(1) , 9
End If
Close #1
Else 'gdy co1s = 1
Config 1wire = Pind.7 'konfiguruj interfejs 1wire do pracy z czujnikem na dworze
If Pomiar_temperatury = 0 Then 'początek instrukcji warunkowej pomiar temperatury
1wreset
1wwrite &HCC
1wwrite &H44
Else 'gdy pomiar temperatury = 1
1wreset
1wwrite &HCC
1wwrite &HBE
Temperatura = 1wread(2) 'odczytaj i wpisz temperature do zmiennej
If Err = 1 Then : Bledy = 51 : Else : Bledy = 0 : End If 'gdy problem z komunikacją wystaw kod błędu
Temperatura = Temperatura Or 65536 'uzupełnij liczbę gdy temperatura ujemna
Temperatura_single1 = Temperatura / 16
End If 'koniec instrukcji warunkowej pomiar temperatury
Open "com2:" For Binary As #2
Serial_flaga_1 = Ischarwaiting(#2)
If Serial_flaga_1 = 1 Then
Bufor_odbiorczy_uart_1 = 0
Inputbin #2 , Paczkadanych_in_1(1) , 4
Led_a1 = Paczkadanych_in_1(1) , 1
Led_b1 = Paczkadanych_in_1(2) , 1
T_pokoju_1 = Paczkadanych_in_1(3) , 1
Bledy_1 = Paczkadanych_in_1(4) , 1
Else
Bufor_odbiorczy_uart_1 = 1
End If
If Bledy_1 > 20 Or Wlacz_led_pokoju_1 = 1 Then
Paczkadanych_1(1) , 1 = Ss
Paczkadanych_1(2) , 1 = Mm
Paczkadanych_1(3) , 1 = Gg
Paczkadanych_1(4) , 1 = Dni
Paczkadanych_1(5) , 1 = Mie
Paczkadanych_1(6) , 1 = Rok
Paczkadanych_1(7) , 1 = Dzien_tygodnia
Paczkadanych_1(8) , 1 = Jasnosc_1
Paczkadanych_1(9) , 1 = Jasnosc_1
Printbin #2 , Paczkadanych_1(1) , 9
End If 'koniec instrukcji warunkowej gdy błędy_1 > 11 i błędy_1 < 50
Close #2
End If
Re: Komunikacja przez uart problem
Cześć cały wkleiłeś ten kod bo go tak na szybko wrzuciłem i wywala błąd ze pętla nie jest zamknięta.
Re: Komunikacja przez uart problem
hm dawno nic nie robiłem z uartem więc sam już nie pamiętam może napisz ta obsługę uatów w osobnym programie bez tej reszty będzie łatwiej to testować.
Aha i spróbuj wyłączyć pierwszy a użyć drugiego uarta musi być gdzieś błąd.
Edit 22:26
yy Coś tam kleciłem ale nie za bardzo mam czas wiec tylko w symulatorze:
Posiekałem ten twój kod
Sprawdź w procku i spróbuj pisać z terminala
ja to tylko podglądałem w symulatorze wiec może w ogóle nie ruszyć.
Pozdrawiam
Aha i spróbuj wyłączyć pierwszy a użyć drugiego uarta musi być gdzieś błąd.
Edit 22:26
yy Coś tam kleciłem ale nie za bardzo mam czas wiec tylko w symulatorze:
Kod: Zaznacz cały
$sim
$regfile = "m644pdef.dat"
$crystal = 8000000
$baud = 19200
$baud1 = 19200
'====================================================================UART====================================================
Dim Paczkadanych_0(9) As Byte , Paczkadanych_in_0(4) As Byte , Paczkadanych_in_1(4)as Byte , Serial_flaga_0 As Byte
Dim Serial_flaga_1 As Byte , Paczkadanych_1(9) As Byte
Bufor_odbiorczy_uart_0 Alias Porta.0
Bufor_odbiorczy_uart_1 Alias Porta.1
Spi_in Alias Porta.2
Impulsy_zegara Alias Portc.2
Wylacznik_12v Alias Portc.4
Piec_co Alias Portd.6
'==================================================================Konfiguracje==============================================
Config Lcd = 20 * 4
' Config Scl = Portb.2
'Config Sda = Portc.5
'Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
Config Spi = Soft , Din = Pinc.3 , Dout = Pinc.0 , Ss = None , Clock = Pinc.1
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 40
Config Serialin1 = Buffered , Size = 40
Config Serialout = Buffered , Size = 90
Config Serialout1 = Buffered , Size = 90
'Config Watchdog = 2048
Config Porta.0 = Output
Porta.0 = 1
Config Porta.1 = Output
Porta.1 = 1
Config Porta.2 = Output
Porta.2 = 1
Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Portc.2 = 0
Config Portc.3 = Input
Config Portc.4 = Output
Portc.4 = 0
Config Portd.6 = Output
Portd.6 = 0
'==============================================================Konfiguracje timerów==========================================
'===================================W?a;cz globalny system przerwan' i przerwania zewne;trzne oraz od uarta i spi===============
Enable Interrupts
Enable Urxc
Enable Urxc1 : Enable Utxc : Enable Utxc1
'=========================================================Konfiguracje przetwornika ADC======================================
'=================================================Pocza;tkowe wartos'ci wpisane po starcie procesora===========================
'==============================================================Powitanie i test==============================================
Reset Bufor_odbiorczy_uart_0
'Wait 1
Set Bufor_odbiorczy_uart_0
' Wait 1
Reset Bufor_odbiorczy_uart_1
'Wait 1
Set Bufor_odbiorczy_uart_1
Do
'Open "com1:" For Binary As #1
Serial_flaga_0 = Ischarwaiting()
If Serial_flaga_0 = 1 Then
Bufor_odbiorczy_uart_0 = 0
Inputbin , Paczkadanych_in_0(1) , 4
Print "odebra³em com 1 "
Else
Bufor_odbiorczy_uart_0 = 1
End If
'Close #1
Open "com2:" For Binary As #2
Serial_flaga_1 = Ischarwaiting(#2)
If Serial_flaga_1 = 1 Then
Bufor_odbiorczy_uart_1 = 0
Inputbin #2 , Paczkadanych_in_1(1) , 4
Print "odebralem com 2 "
Else
Bufor_odbiorczy_uart_1 = 1
End If
Loop
End
Sprawdź w procku i spróbuj pisać z terminala
ja to tylko podglądałem w symulatorze wiec może w ogóle nie ruszyć.
Pozdrawiam
Re: Komunikacja przez uart problem
Chodzi o to właśnie że jak obsługuje 1 uart a drugi dam jako komentarz bez zmian konfiguracji zostają jak działa tylko jeden uart wszystko gra ,a i jeszcze jedna sprawa poprzez uart komunikują sie dwa mikrokontrolery atmega644p i ATMEGA8515 i jeśli teraz zresetuje jeden z procków to drugi się zawiesza i watchdog go resetuje.
Druge pytanie czy jest jakiś polski sklep internetowy co oferuje te moduły bezprzewodowe co pisałeś bo szukałem i nic?
Druge pytanie czy jest jakiś polski sklep internetowy co oferuje te moduły bezprzewodowe co pisałeś bo szukałem i nic?
Re: Komunikacja przez uart problem
Nie znam takiego sklepu.
A po co ci sklep żeby jeszcze sprzedawca na tobie dodatkowo zarobił ?
Piszesz e-mail z za pytaniem ze jesteś zainteresowany jakimś tam modelem i prosisz o podanie ceny wraz z przesyłko do polski.
Powiem tak modemy są tanie bo wyjdzie około 100zł za jeden ale przesyłka już nie.
Pierwsze 0.5kg zwykle kosztowało mnie 60 dolarów następne 0,5 kg to dodatkowo 30 dolarów.
no i jeszcze cło płatne przy odbiorze.
Spróbuj uprościć tą transmisje dodaj np ramkę synchronizacyjna na początku. w tedy nie będzie problemu z wieszaniem.
Nie obiecuje ale jak mi czas pozwoli to może w niedziel odpalę to na dwóch atmega 128
i sprawdzę co z ta transmisją jest nie tak.
Nie rozumiem tego fragmentu z błędami poco ci to jest potrzebne strasznie to miesza nie lepiej wywalić to i dać np CRC8.
poczytaj na MCS electrnic może tam coś więcej znajdziesz na temat ischarwaitng na dwóch uartach.
Ewentualnie napisz osobny program tylko do tych dwóch uartów i testuj gdzie jest błąd.
Chyba najlepsze rozwiązanie.
A po co ci sklep żeby jeszcze sprzedawca na tobie dodatkowo zarobił ?
Piszesz e-mail z za pytaniem ze jesteś zainteresowany jakimś tam modelem i prosisz o podanie ceny wraz z przesyłko do polski.
Powiem tak modemy są tanie bo wyjdzie około 100zł za jeden ale przesyłka już nie.
Pierwsze 0.5kg zwykle kosztowało mnie 60 dolarów następne 0,5 kg to dodatkowo 30 dolarów.
no i jeszcze cło płatne przy odbiorze.
Spróbuj uprościć tą transmisje dodaj np ramkę synchronizacyjna na początku. w tedy nie będzie problemu z wieszaniem.
Nie obiecuje ale jak mi czas pozwoli to może w niedziel odpalę to na dwóch atmega 128
i sprawdzę co z ta transmisją jest nie tak.
Nie rozumiem tego fragmentu
Kod: Zaznacz cały
If Bledy_0 > 10 Or Wlacz_led_pokoju_2 = 1 Then 'początek instrukcji warunkowej gdy błędy > 10 i błędy < 50
poczytaj na MCS electrnic może tam coś więcej znajdziesz na temat ischarwaitng na dwóch uartach.
Ewentualnie napisz osobny program tylko do tych dwóch uartów i testuj gdzie jest błąd.
Chyba najlepsze rozwiązanie.
Re: Komunikacja przez uart problem
No rzeczywiście... jak woda (złota woda). Tanimi to ich bym w takim układzie nie nazwał (w układzie jak dochodzą jeszcze koszty wysyłki).Powiem tak modemy są tanie bo wyjdzie około 100zł za jeden ale przesyłka już nie. Pierwsze 0.5kg zwykle kosztowało mnie 60 dolarów następne 0,5 kg to dodatkowo 30 dolarów.no i jeszcze cło płatne przy odbiorze.
A cło, o ile mnie pamięć nie myli do kwoty 100 czy 150 euro nie jest liczone, choć to jeszcze może zależeć od przedmiotu podlegającego cłu.
Re: Komunikacja przez uart problem
To narazie dam sobie spokuj z tymi modułami i poszukam czegoś innego.Ten fragment co jest niezrozumiały
tam jest zły komentarz ta procedura jest dlatego tak napisana aby dane były wysyłane tylko wtedy gdy drugi układ zgłosi błąd albo gdy te ledy nie swiecą.Kod troche zmodyfikowałem i na jednym działa zgrabniej.
A da mi coś jak przykładowo przed odbiorem dam np.odblokowanie przerwań od uarta odbiorczego a po odebraniu danych zablokuje owe przerwanie?
Kod teraz wygląda tak to fragment odpowiedialny za odbiór i nadawanie?
Blokowanie przerwań terz nic nie daje.
tam jest zły komentarz ta procedura jest dlatego tak napisana aby dane były wysyłane tylko wtedy gdy drugi układ zgłosi błąd albo gdy te ledy nie swiecą.Kod troche zmodyfikowałem i na jednym działa zgrabniej.
A da mi coś jak przykładowo przed odbiorem dam np.odblokowanie przerwań od uarta odbiorczego a po odebraniu danych zablokuje owe przerwanie?
Kod teraz wygląda tak to fragment odpowiedialny za odbiór i nadawanie?
Kod: Zaznacz cały
Select Case Co2s: 'początek instrukcji wyboru co2s
Case 0:
Config 1wire = Pinb.3 'konfiguruj interfejs 1wire do pracy z czunikem w skrzynce
If Pomiar_temperatury = 0 Then 'poczontek instrukcji warunkowej pomiar temperatury
1wreset
1wwrite &HCC
1wwrite &H44
Else 'gdy pomiar temperatury = 1
1wreset
1wwrite &HCC
1wwrite &HBE
Temperatura = 1wread(2)
If Err = 1 Then : Bledy = 50 : Else : Bledy = 0 : End If
Temperatura = Temperatura Or 65536 'uzupełnij liczbę gdy temperatura ujemna
Temperatura_single2 = Temperatura / 16
End If 'koniec instrukcji warunkowej pomiar temperatury
Open "com1:" For Binary As #1
Serial_flaga_0 = Ischarwaiting(#1)
If Serial_flaga_0 = 1 Then
Bufor_odbiorczy_uart_0 = 0
Inputbin #1 , Paczkadanych_in_0(1) , 4
Led_a2 = Paczkadanych_in_0(1) , 1
Led_b2 = Paczkadanych_in_0(2) , 1
T_pokoju_2 = Paczkadanych_in_0(3) , 1
Bledy_0 = Paczkadanych_in_0(4) , 1
Else
Bufor_odbiorczy_uart_0 = 1
End If
If Bledy_0 >= 10 Or Led_a2 <> Jasnosc_2 Then
Paczkadanych_0(1) , 1 = Ss
Paczkadanych_0(2) , 1 = Mm
Paczkadanych_0(3) , 1 = Gg
Paczkadanych_0(4) , 1 = Dni
Paczkadanych_0(5) , 1 = Mie
Paczkadanych_0(6) , 1 = Rok
Paczkadanych_0(7) , 1 = Dzien_tygodnia
Paczkadanych_0(8) , 1 = Jasnosc_2
Paczkadanych_0(9) , 1 = Jasnosc_2
Printbin #1 , Paczkadanych_0(1) , 9
End If
Close #1
Case 1: 'gdy co1s = 1
Config 1wire = Pind.7 'konfiguruj interfejs 1wire do pracy z czujnikem na dworze
If Pomiar_temperatury = 0 Then 'początek instrukcji warunkowej pomiar temperatury
1wreset
1wwrite &HCC
1wwrite &H44
Else 'gdy pomiar temperatury = 1
1wreset
1wwrite &HCC
1wwrite &HBE
Temperatura = 1wread(2) 'odczytaj i wpisz temperature do zmiennej
If Err = 1 Then : Bledy = 51 : Else : Bledy = 0 : End If 'gdy problem z komunikacją wystaw kod błędu
Temperatura = Temperatura Or 65536 'uzupełnij liczbę gdy temperatura ujemna
Temperatura_single1 = Temperatura / 16
End If 'koniec instrukcji warunkowej pomiar temperatury
' Open "com2:" For Binary As #2
' Serial_flaga_1 = Ischarwaiting(#2)
' If Serial_flaga_1 = 1 Then
' Bufor_odbiorczy_uart_1 = 0
' Inputbin #2 , Paczkadanych_in_1(1) , 4
' Led_a1 = Paczkadanych_in_1(1) , 1
' Led_b1 = Paczkadanych_in_1(2) , 1
' T_pokoju_1 = Paczkadanych_in_1(3) , 1
' Bledy_1 = Paczkadanych_in_1(4) , 1
' Else
' Bufor_odbiorczy_uart_1 = 1
' End If
' If Bledy_1 >= 20 Or Led_a1 <> Jasnosc_1 Then
' Paczkadanych_1(1) , 1 = Ss
' Paczkadanych_1(2) , 1 = Mm
' Paczkadanych_1(3) , 1 = Gg
' Paczkadanych_1(4) , 1 = Dni
' Paczkadanych_1(5) , 1 = Mie
' Paczkadanych_1(6) , 1 = Rok
' Paczkadanych_1(7) , 1 = Dzien_tygodnia
' Paczkadanych_1(8) , 1 = Jasnosc_1
' Paczkadanych_1(9) , 1 = Jasnosc_1
' Printbin #2 , Paczkadanych_1(1) , 9
' End If 'koniec instrukcji warunkowej gdy błędy_1 > 11 i błędy_1 < 50
' Close #2
Re: Komunikacja przez uart problem
Nie chce Ci tu jakiś głupot na opowiadać wydaje mi się ze nie musisz dawać tego #1 w nawiasie w pierwszym uarcie.
Plus nie musisz go otwierać jak mówi help. Help tak mówi dla OPEN
Kod: Zaznacz cały
Open "com1:" For Binary As #1
Serial_flaga_0 = Ischarwaiting(#1)
If Serial_flaga_0 = 1 Then
Bufor_odbiorczy_uart_0 = 0
Inputbin #1 , Paczkadanych_in_0(1) , 4
Plus nie musisz go otwierać jak mówi help.
Kod: Zaznacz cały
The default device is COM1 and you don't need to open a channel to use INPUT/OUTPUT on this device.
Kod: Zaznacz cały
Serial_flaga_0 = Ischarwaiting()
If Serial_flaga_0 = 1 Then
Bufor_odbiorczy_uart_0 = 0
Inputbin , Paczkadanych_in_0(1) , 4
Print "odebra³em com 1 "
Else
Bufor_odbiorczy_uart_0 = 1
End If
Re: Komunikacja przez uart problem
Szczerze mówiąc to tego też prubowałem i nie ma żadnej rurznicy a może błąd polega na tym że do tego nie działającego uarta nie jest podpięty żaden procesor do działającego jest podłączony atmtga8515 i wszystko śmiga wspaniale pomijając ten problem z resetem.
Podepne do tego wolnego uarta attiny2313 i zobacze czy dalej bendzie się zawieszać.
Podepne do tego wolnego uarta attiny2313 i zobacze czy dalej bendzie się zawieszać.
Re: Komunikacja przez uart problem
Problem rozwiązany pomogło kasowanie buforów wejściowych uarta przed pentlą doend
Funkcja clear serialin i clear serialin1.
Szczegulne podziękowania dla kolegi pikczu dzięki któremu sporo się nauczyłem poniewarz dopiero ucze się programować w bascomnie.
Funkcja clear serialin i clear serialin1.
Szczegulne podziękowania dla kolegi pikczu dzięki któremu sporo się nauczyłem poniewarz dopiero ucze się programować w bascomnie.
Re: Komunikacja przez uart problem
Znalazłem w starych mailach ceny na modemy
JZ875 Low Power Data RF Module 83USD/unit (weight:96g)
JZ873 Low Power Data RF Module 50USD/unit (weight:17g)
JZ872 Low Power Data RF Module 56USD/unit (weight:56g)
JZ871 Micro Power Data RF Module 27USD/unit (weight:13g)
to były ceny w zeszłym roku z tego co widzę za 6 szt jz872 zapłaciłem 400 dolarów.
Potem było jeszcze cło chyba jakieś 200zł.
JZ875 Low Power Data RF Module 83USD/unit (weight:96g)
JZ873 Low Power Data RF Module 50USD/unit (weight:17g)
JZ872 Low Power Data RF Module 56USD/unit (weight:56g)
JZ871 Micro Power Data RF Module 27USD/unit (weight:13g)
to były ceny w zeszłym roku z tego co widzę za 6 szt jz872 zapłaciłem 400 dolarów.
Potem było jeszcze cło chyba jakieś 200zł.
Re: Komunikacja przez uart problem
A ja szukałem modułów z uartem i znalazłem moduły mobota komunikująca się pomiędzy sobą albo z komputerem pc zasięg do 100m.http://www.mobot.pl/index.php?site=prod ... tails=7771czy ktoś z kolegów mniał doczynienia z takimi modułami?
A i jeszcze jedno pytanie czy wie ktoś jak zrobić konwerter UART SPI czy da się to zrobić na ATTINY2313 z spi programowym tylko nie wiem jak zrobić żeby przekaztwać paczkidanych zawierających po np.9bajtów czy da się je przekazywać pojedyńczo bo na całe 9bajtów to za mało jest pamięci SRAM czy druga opcja może lepiej wykożystać gotowy konwerter np.MAX3100?
Co waszym zdaniem jest lepsze i czy ktoś robił coś podobnego?
A i jeszcze jedno pytanie czy wie ktoś jak zrobić konwerter UART SPI czy da się to zrobić na ATTINY2313 z spi programowym tylko nie wiem jak zrobić żeby przekaztwać paczkidanych zawierających po np.9bajtów czy da się je przekazywać pojedyńczo bo na całe 9bajtów to za mało jest pamięci SRAM czy druga opcja może lepiej wykożystać gotowy konwerter np.MAX3100?
Co waszym zdaniem jest lepsze i czy ktoś robił coś podobnego?
Re: Komunikacja przez uart problem
Niestety ze SPI nie mam żadnego doświadczenia.
Wstyd się przyznać ale nie zrobiłem jeszcze żadnego układu który by używał SPI.
Pozdrawiam i Wesołych Świat Życzę.
Ps te moduły z linku mogą być ok.
Wstyd się przyznać ale nie zrobiłem jeszcze żadnego układu który by używał SPI.
Pozdrawiam i Wesołych Świat Życzę.
Ps te moduły z linku mogą być ok.
Re: Komunikacja przez uart problem
O mamo, a skąd takie wnioski. I dlaczego programowy spi skoro jest sprzętowy??A i jeszcze jedno pytanie czy wie ktoś jak zrobić konwerter UART SPI czy da się to zrobić na ATTINY2313 z spi programowym tylko nie wiem jak zrobić żeby przekaztwać paczkidanych zawierających po np.9bajtów czy da się je przekazywać pojedyńczo bo na całe 9bajtów to za mało jest pamięci SRAM
Re: Komunikacja przez uart problem
Dlatego SPI programowy bo mam już płytkę i wolał bym programowy a pozatym czy sprzętowy czy programowy to nie ma znaczącej różnicy.
- Tomasz Gumny
- -
- Posty:685
- Rejestracja:4 lut 2004, o 23:31
- Lokalizacja:Trzcianka/Poznań
Re: Komunikacja przez uart problem
Proponuję zerknąć do pdf-a.Bo ATTINY2313 nie ma spi sprzętowego podobno.
Re: Komunikacja przez uart problem
Pomyliłem attiny2313 z 90s2313 dlatego taką głupotę walnołem za pomyłkę przepraszam i prosze o odpowiedzi na moje pytania dotyczące spi i modułu mobot.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości