między Atmegą a modułem G

BTW mam jeszcze jedno pytanie o obsługę bufora odbiorczego.

Mianowicie jak uniknąć sytuacji, kiedy jakiś błąd transmisji (np. przeinaczony znak) uniemożliwi jego normalne wyczyszczenie? Normalnie w tym przypadku mamy do czynienia z dwiema sytuacjami:

  1. Wysyłanie polecenia do modułu i oczekiwanie na odpowiedź. Tutaj mogę wyczyścić bufor przed rozpoczęciem tej procedury i przed jej zakończeniem (bez względu na to, czy wynik będzie pozytywny czy nie).

  1. Bardziej kłopotliwa jest jednak druga sytuacja, mianowicie oczekiwanie na konkretną wiadomość, wysłaną przez moduł w przypadku konkretnego zdarzenia (np. "RING\r\n\r\n" przy połączeniu przychodzącym) tutaj bufor mogę wyczyścić dopiero w przypadku rozpoznania właściwej komendy. A co, jeśli do bufora przyjdzie coś innego? Wtedy po prostu kolejny komunikat zostanie do niego doklejony...

Poprzednio, gdy analizowałem komunikaty linijka po linijce, przepisując je do innej tablicy ten problem nie występował - przyjście kolejnej linijki czyściło bufor z jego poprzedniej zawartości.

Czy istnieje jakiś sposób na nauczenie programu rozróżniania poszczególnych komunikatów jako odrębnych całości, nawet jeśli składają się z kilku linii? Jedyne rozwiązanie jakie w tej chwili przychodzi mi do głowy, to zastosowanie timera, który cyklicznie czyściłby bufor, zapobiegając "sklejeniu" dwóch komunikatów.

Reply to
Atlantis
Loading thread data ...

Normalnie w

Po co w ogóle chcesz czyścić bufor? W normalnym korzystaniu nie ma takiej potrzeby, jedynie zagrożenie to nadpisanie danych, gdy za wolno go czytasz (jest za mały). Problem może nastąpić gdy dane beda się pojawiac niespodziewanie np. RING w trakcie procesowania innej komend. O ile pamiętam RING pojawi się po OK ostatniego pol

Reply to
Marek

Urwało posta.. ostatniego polecenia więc wystarczy przed wysłaniem kolejnego polecenia wysadzić czy czegoś nowego w buforze nie ma.

Reply to
Marek

Dnia Sun, 23 Dec 2012 23:45:55 +0100, Marek napisał(a):

Musi jednak jakos lapac dane do porownania, zeby rozne smieci nie zaklocily przetwarzania. \r czy \n jest wystarczajace - je ignotujemy, ale one wyznaczaja kolejne komunikaty. Nawet jesli jakies smmieci przejda, to "ring" jest powtarzany za kazdym dzwonkiem. A inne ... timeout. Nie bylo potwierdzenia w stosownym czasie - powtarzamy.

J.

Reply to
J.F.

Nie wiem jakie śmieci masz na myśli. Bufor cykliczny ma zapis i odczyt niezależny. Funkcja odczytu z bufora pobieraja tylko te dane (z bufora), które nie zostały jescze odebrane. Funkcja zapisujaca (przerwanie usarta) dodaje odebrane do bufora i przesuwa wskaźnik odczytu dla funkcji czytujacej. Jeśli nic nowego w buforze nie ma funkcja odczytyjaca zwraca null. Wtedy wiemy ze bufor jest "pusty". "Czyszczenie" bufora (jeśli w ogóle konieczne) robi się poprzez zrownanie wskaźnika odczytu i zapisu (danych nie trzeba "zerować"). Jak już pisałem RING nie powinIen się pojawić z nienacka tzn. w połowie odpowiedzi na poprzednie polecenie, ale tuż po jego zakończeniu lub w trakcie przerwy między poleceniami. Wystarczy pilnowac aby po każdej odpowiedzi lub przed nowym zapytaniem sprawdzac czy w buforze nie pojawił się ring.

Reply to
Marek

Tak swoją drogą, jeśli chodzi o programowanie AVR to (abstrahując od tematu modułu GSM) jedno pytanie chodzi mi po głowie. Mianowicie do jakiego stopnia trudności można zakwalifikować projekty wykorzystujące moduły Ethernet? Takie konstrukcje widuje się od jakiegoś czasu coraz częściej - czy to w postaci jakiegoś Arduino z odpowiednim shieldem czy też układu zaprojektowanego zupełnie od podstaw.

To wyższa szkoła jazdy, wymagająca kilkuletniego doświadczenia czy może nie jest aż tak źle? Istnieją gotowe rozwiązania, które pozwalałyby ominąć programowanie obsługi TCP/IP? Załóżmy, że w grę wchodzi transmisja niezbyt złożonych danych - np. telnet.

Reply to
Atlantis

Tak swoją drogą, jeśli chodzi o poziomy napięć pomiędzy modułem a Atmegą.

W nocie katalogowej modułu D15 znajduje się informacja, że sygnały są buforowane przez MC74VHCT244. Znajduje się tam także następujący schemat:

formatting link
Jak widać na liniach wejściowych, za buforami znajdują się dzielniki napięcia.

Natomiast linie wyjściowe połączone są jedynie przez bufor. Nota o tym co prawda nie wspomina, ale czy tam nie powinny się przypadkiem znaleźć jakieś rezystory podciągające do VCC?

BTW jak zachowa się uC AVR, jeśli na początku programu nie ustalimy stanu wejścia podciągając go do plusa lub masy przez wpisanie odpowiedniej wartości do PORTx? Przyjmie jakąś domyślną wartość czy też jego stan będzie nieustalony?

Reply to
Atlantis

Atlantis snipped-for-privacy@wp.pl napisał(a):

Nieustalony, będzie zbierać śmieci. Co rozumiesz przez wartość domyślną? Co miałoby ją zmieniać?

Reply to
Grzegorz Niemirowski

W dniu 2013-01-09 23:45, Grzegorz Niemirowski pisze:

Gdyby np. kompilator ustawiał jakąś domyślną wartość wejścia w przypadku, gdyby użytkownik tego nie zrobił. Tak swoją drogą kiedy wskazane jest podciągnięcie linii do VCC przez rezystor, a kiedy powinienem tego unikać? Oczywiście pomijając oczywiste sytuacje, jak np. zastosowanie bufora z otwartym kolektorem.

Słyszałem też głosy mówiące, że uC powinien być połączony z modułem za pośrednictwem szeregowych rezystorów. Rozwiązanie wskazane czy nie?

Reply to
Atlantis

Atlantis snipped-for-privacy@wp.pl napisał(a):

Jakby kompilator ustawiał wartość wejścia, to to już przestałoby być wejście, tylko by było zwykłe wyjście. Użytkownik też nic nie robi. Wejście jest wejściem dlatego, że stan jest wyznaczany przez czynniki zewnętrzne. Po co Ci wejście, na którym możesz coś ustawić?

Np. gdy w jakichś sytuacjach do wejścia nie jest nic podłączone.

Jeśli są zasilane różnymi napięciami.

Reply to
Grzegorz Niemirowski

Użytkownik "Atlantis" snipped-for-privacy@wp.pl napisał w wiadomości news:kcmvnv$u5q$ snipped-for-privacy@portraits.wsisiz.edu.pl...

Jest tak:

- konkurencja w produkcji scalaków zmusza wszystkich producentów do produkcji taniej, taniej i jeszcze raz taniej,

- im więcej chipów na płytce krzemu w produkcji tym taniej,

- więcej chipów na płytce = większe płytki i coraz mniejsze elementy,

- mniejsze rozmiary elementów -> mniejsze pojemności,

- mniejsze pojemności -> krótsze czasy przełączania,

- zauważ, że w katalogu podawany jest maksymalny czas narastania/opadania sygnału na wyjściu, a nie jest podany minimalny,

- efekt - ten sam scalak (np. ze starej serii HC) obecnie produkowany może mieć 10 razy stromsze zbocza niż taki sprzed 20 lat, I teraz rozgałęzienie na dwa tematy:

  1. Ground bounce

- struktura scalaka jest podłączona do pinu GND jakimś drucikiem o niezerowej L,

- bufor wyjściowy musi przeładować pojemności zewnętrzne,

- przez ten przewód o indukcyjności L przepływają impulsy o czasach narastania poniżej ns,

- efekt - na wyjściu bufora pojawiają się napięcia poniżej GND i powyżej VCC,

- te przepięcia powodują przepływ impulsów prądu przez obwody zabezpieczające wejścia drugiego scalaka,

- impulsy prądu są źródłem emisji zakłóceń,

- nie wiem jaki jest wpływ na przykład na trwałość obwodów zabezpieczających wejścia i czy w skrajnych sytuacjach nie może prowadzić do latch-up,

- rezystor szeregowy zmniejsza pojemność do przeładowania natychmiast (o pojemność ścieżki i wejścia) zmniejszając te impulsy,

- poza tym rezystor szeregowy ogranicza prąd w obwodach zabezpieczających.

  1. Linie długie

- o tym, czy ścieżka jest linią długą nie decyduje częstotliwość sygnałów, a stromość zboczy,

- obecnie nawet 5cm ścieżka może już być linią długą,

- niedopasowana linia długa = odbicia, emisja zakłóceń, wrażliwość na zakłócenia (a zakłóceń obecnie bardzo dużo - kiedyś nie było komórek),

- rezystor szeregowy o R zgodnych z Zo ścieżki tuż przy wyjściu scalaka to jednostronne dopasowanie linii długiej (zbocze dzielone jest w R/Zo na pół, potem odbijając się od wejścia jest podwajane (odbiorca widzi pełne zbocze), wraca i już się nie odbija bo dopasowanie). P.G.

Reply to
Piotr Gałka

W dniu 2013-01-11 10:40, Piotr Gałka pisze:

Hmm... Może w takim razie dobrym pomysłem byłoby (o ile tylko pozwala na to ilość miejsca na PCB oraz poziom skomplikowania układu) stosowanie buforów z otwartym kolektorem, z wyjściem podciągniętym do VCC? Nawet wtedy, jeśli peryferia pracują na tym samym napięciu co uC. Takie rozwiązanie ogólnie zwiększy bezpieczeństwo układów (np. względem możliwości wystąpienia latch-upu) i poprawi jakość transmisji? Czy to już jednak będzie overkill?

Reply to
Atlantis

Atlantis snipped-for-privacy@wp.pl napisał(a):

A jak się ten pomysł ma do tego, co napisał Piotr, np. stromych zboczy i przepięć? Zysk byłby połowiczny, bo tylko przy zboczach narastających.

Reply to
Grzegorz Niemirowski

Float.

Dla DDR=0 PORT nie podciąga do masy.

DDR=0 PORT=0 to float, wysoka impedancja.

Reply to
Adam Wysocki

Użytkownik "Atlantis" snipped-for-privacy@wp.pl napisał w wiadomości news:kcpivn$2ar$ snipped-for-privacy@portraits.wsisiz.edu.pl...

Dokładanie czegoś więcej niż jeden rezystor to chyba przesada. Szyny szeregowe to tylko kilka drutów. Ja tam (na wszelki wypadek) nie żałuję tych kilku 0402 (do 0201 jeszcze nie doszedłem). P.G.

Reply to
Piotr Gałka

Zwiększony pobór prądu. Bufor cyfrowy nadal jest aktywny.

Reply to
Adam Wysocki

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.