Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 mar 2026, o 08:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 7 sie 2014, o 15:50 
Offline
Nowy

Dołączył(a): 26 sty 2014
Posty: 8
Pomógł: 0

Witam
Posiadam taki układ. Moduł GSM MG2639V. Podłączony za pomocą lini UART do mikrokontrolera Atmega64. Oczywiście na tych liniach jest zrobiona konwersja napięć na 2.8V. Komunikacja z modemem za pomocą terminala na PC działa prawidłowo. Wcześniej, jak resetowałem oraz włączałem modem "z palca" czyli przytykałem kabelek POWERKEY do masy to i z AVR działał dobrze. Problemy pojawiły się, jak chciałem resetować modem oraz włączać go za pomocą AVR. Oto kod:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I teraz tak. Jak jest linijka sei(); a po linijce w której włączam modem pinem POWERKEY nie ma nic, to modem się normalnie uruachamia. Natomiast jak np chcę wysłać po włączeniu komendę AT, to modem się jak by resetuje.Tzn dioda mignie raz, chwila przerwy i znowu mignie raz. Dla mnie wygląda to na reset modemu. Natomiast jak zakomentuję sei(); a odkomentuję komendę wysyłającą AT, to modem też się włącza. Czyli, albo to albo to. Co jest nie tak w tym kodzie? Ten kod co teraz wrzuciłem chyba powinien mi po prostu uruchomić modem co nie? Nie kapuję o co chodzi z tym sei() i z wysłaniem AT, tzn wiem o co chodzi ale nie wiem czemu jednocześnie nie mogą być te dwie linijki w programie. Problem dzieje się nawet wtedy jak odepnę linie RxD i Txd pomiędzy AVR-Modem a zostawię sei() w programie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2014, o 20:22 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

maxxxior napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jedna z tych funkcji jest w tym kodzie a gdzie druga? Ale to szczegół.

sei() odblkowuje wszystkie przerwania, a to są funkcje, które wywołuje sprzęt jak coś się stanie. Takie funkcje nie są wywoływane w funkcji main jak np. USART1_Init czy _delay_ms. Funkcje przerwania masz na końcu i zaczyna się ona od ISR, a w nawiasie jest nazwa informująca o tym jakiego sprzętu dotyczy. USART1_RX_vect oznacza, że odebranie jakiegoś znaku przez port szeregowy 1 wywoła tą funkcję. Ty w swoim kodzie nie potrzebujesz tego robić i sei() nie jest potrzebne. To co się dzieje to reset procesora. Program zaczyn a się na nowo i resetuje moduł GSM. Reset procesora to wynik złej konfiguracji sprzętu. Nie widzę tego w powyższym kodzie, ale jak masz dwie funkcje o których wspomniałem na początku to pewnie w drugiej masz odblokowane przerwanie, ale już dotyczące konkretnego sprzętu w procesorze. Rzecz w tym, że jak to zrobisz, a nie ma zdefiniowanej funkcji obsługi tego właśnie przerwania to masz reset procka.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2014, o 15:49 
Offline
Nowy

Dołączył(a): 26 sty 2014
Posty: 8
Pomógł: 0

no muszę chyba stwierdzić że sei() jest konieczne. Z doświadczenia i z testu który zrobiłem przed chwilą. Po usunięciu sei(); program w ogóle nie wywołuje przerwania. Oczywiście w poprzednim poście nie wrzuciłem całege kodu z ciałem przerwania tylko szkielet. Oto kompletny kod:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i tak jak pisałem. jak jest sei() i cokolwiek wysyłające coś do UART1 po sekwencji włączania modemu, to modem się resetuje. Jak wywale sei to modem sie uruchamia ale nie wchodzi w przerwanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2014, o 16:16 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

maxxxior napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Odblokowałeś 2 przerwania, a masz tylko jedną funkcję obsługi przerwania. Oprócz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

potrzeba jeszcze:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2014, o 17:01 
Offline
Nowy

Dołączył(a): 26 sty 2014
Posty: 8
Pomógł: 0

ok, a jak nie chcę wysyłać danych w przerwaniu, tylko normalnie? a tylko odbierać je w przerwaniu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sie 2014, o 21:33 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

To wtedy nie włączasz przerwania od nadawania:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2014, o 18:42 
Offline
Nowy

Dołączył(a): 26 sty 2014
Posty: 8
Pomógł: 0

Ale to, że odblokuję przerwania od nadawania UARTu nie znaczy chyba że muszę później mieć funkcję definiującą przerwanie od TX? Czy musi być? Aktualnie posiadam taki kod:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


kod działa w połowie dobrze. Modem się uruchamia, ustawia tryb textowy, odbiera wiadomość ode mnie z tel. i następnie jąkasuje (tak jak to widać w kodzie). Jeśli wiadomość jest o treści "pozycja", to ok, odsyła mi wiadomość o treści "sms2". Ale jeśli wyśle wiadomość o innej treści, to nie odsyła (i tak powinno być), ale jak po tej "błędnej" wiadomości jeszcze raz wyślę mu wiadomość o treści "pozycja" to już nie odsyła :/ czemu??? już zmarnowałem chyba z 5zł na to całe testowanie podczas prób poprawiania kodu i nic :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 20:54 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

1. Bray Terminal pozwala na podpięcie pod przycisk złożonej komendy i możesz to wykorzystać do debugowania zamiast wysyłać do modułu GSM
2. Wszędzie gdzie się da możesz wysyłać wartości zmiennych na terminal, ale dobrze by było jakbyś użył buforowanej transmisji jak w przykładach z książki, bo twój USART_Transmit popsuje działanie ISR(USART1_RX_vect ) jakbyś chciał coś tam wysłać
3. Można sobie kupić pakiet SMSów. Porównaj oferty na kartę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO