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

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:
Re: Komunikacja przez uart problem

Postautor: pikczu » 2 gru 2011, o 11:35

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.

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 10 gru 2011, o 14:21

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. :no:

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: pikczu » 11 gru 2011, o 22:57

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.

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 13 gru 2011, o 14:17

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:

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

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: pikczu » 13 gru 2011, o 21:20

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.

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: pikczu » 13 gru 2011, o 21:49

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:

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
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

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 14 gru 2011, o 20:23

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?

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: pikczu » 14 gru 2011, o 23:08

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

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
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.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Re: Komunikacja przez uart problem

Postautor: pajaczek » 15 gru 2011, o 08:55

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.
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).
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.

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 15 gru 2011, o 09:35

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?

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
Blokowanie przerwań terz nic nie daje.

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: pikczu » 15 gru 2011, o 21:15

Nie chce Ci tu jakiś głupot na opowiadać wydaje mi się ze nie musisz dawać

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
tego #1 w nawiasie w pierwszym uarcie.
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.
Help tak mówi dla OPEN

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

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 16 gru 2011, o 12:47

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ć.

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 17 gru 2011, o 15:01

Problem rozwiązany pomogło kasowanie buforów wejściowych uarta przed pentlą do:loop:end
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. :lol:

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: pikczu » 17 gru 2011, o 16:35

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ł.

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 18 gru 2011, o 12:31

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?

Awatar użytkownika
pikczu
-
-
Posty:89
Rejestracja:5 paź 2003, o 19:55
Lokalizacja:Dublin
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: pikczu » 22 gru 2011, o 19:28

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.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Re: Komunikacja przez uart problem

Postautor: pajaczek » 23 gru 2011, o 00:26

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
O mamo, a skąd takie wnioski. I dlaczego programowy spi skoro jest sprzętowy??

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 23 gru 2011, o 17:56

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.

Awatar użytkownika
Tomasz Gumny
-
-
Posty:685
Rejestracja:4 lut 2004, o 23:31
Lokalizacja:Trzcianka/Poznań

Re: Komunikacja przez uart problem

Postautor: Tomasz Gumny » 23 gru 2011, o 18:09

Bo ATTINY2313 nie ma spi sprzętowego podobno.
Proponuję zerknąć do pdf-a.

wacha
-
-
Posty:95
Rejestracja:22 lis 2009, o 21:19
Lokalizacja:biele

Re: Komunikacja przez uart problem

Postautor: wacha » 29 gru 2011, o 11:13

Pomyliłem attiny2313 z 90s2313 dlatego taką głupotę walnołem za pomyłkę przepraszam :no: i prosze o odpowiedzi na moje pytania dotyczące spi i modułu mobot. :?

Wróć do „AVR/AVR32”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości