logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATtiny2313][C] telefon C75

marol_pm 29 Maj 2010 21:19 1964 9
REKLAMA
  • #1 8131377
    marol_pm
    Poziom 11  
    Witam,
    Muszę zestawić połączenie telefonu Siemens C75 z uC ATtiny 2313
    Cel: by dzwonił na jakiś numer :)

    Pinout C75

    1 POWER
    2 GND
    3 TX/D+
    4 RX/D-
    5 DATA/CTS
    6 RTS
    7 CLK/DCD
    8 STEREO1_OUT
    9 GND
    10 STEREO2_OUT
    11 GRD_MIC
    12 MICEA_AC




    DB9 ---> C75
    2 --- 4 RxD
    3 --- 3 TxD
    5 --- 2 GND

    Pytanie:
    Czy na takim połączeniu będzie działać ??
  • REKLAMA
  • #2 8131588
    sulfur
    Poziom 24  
    Może działać a może nie. Skoro używasz z MAX232 to znaczy, że masz taki kabel. Jeśli producent kabla oszczędził i zrobił kabel na dwóch diodach i dwóch tranzystorach, to napięcie wytworzone przez "maxa" może być za małe i komunikacja nie dojdzie do skutku. Ja przeważnie przechodzę w takich momentach z TTL na CMOS za pomocą dzielnika napięcia lub rezystora i diody zenera na TX, RX bez zmian bo TTL wykrywa stan wysoki CMOSa poprawnie. Naturalnie równam masy.

    Pozwalając sobie na małą dygresję co do schematu, czujnik masz podłączony do uC bez żadnego podciągania. Albo podciągasz programowo (PORT na 1, albo podciąganie masz w czujniku). Jeśli żadne z powyższych nie występuje, zastanów się, czy możesz to pominąć.
  • REKLAMA
  • #3 8131795
    marol_pm
    Poziom 11  
    Dzięki za zainteresowanie się tematem :)

    Wiec sytuacja w działaniu jest następująca:
    -Jeżeli użyje kabla oryginalnego Siemensa, z wbudowanym pewnie MAX'em nic sie nie dzieje, jeżeli to podłączam napięcia podobne jak opisałem niżej.
    -Jeżeli podłącze się na kabelkach Rx, Tx, GND (bez kabla) to też nic się nie dzieje, napięcia na Rx, Tx z procka ida ok 5V, za MAX'em Tx ma -8V ;| Rx 0V
    -Jeżeli podłącze się omijając MAX'a wykorzystując obniżenie napięcia na diodzie Zenera i oporniczka, tak jak pisałeś, na wyjściu mam 3,6V dla 100ohm 3,4V dla 200 ohm i resetuje mi za każdym razem telefon :/

    A co do tego INT0, to tam będzie podpięty inny układ który już działa i wystawia odpowiedni stan, a ATtiny, ma wtedy zareagować i ruszyć telefonem :)


    Czy oby na pewno to podłączenie jest ok, czy mam zacząć szukać problemów w kodzie którego dostałem i jest sprawdzony niby ;|
  • REKLAMA
  • #4 8131872
    sulfur
    Poziom 24  
    Podłącz AVR do PCta, uruchom jakiś terminal i zobacz czy coś w ogóle leci przez RS232. Masz MAX232 więc wszytko powinno się odbyć bez żadnych dodatkowych adaptacji. Parametry połączenia znasz.

    Rozumiem, że nie masz na czym wyświetlać tego co przychodzi na USART ?
    Jaki jest kwarc, czy jest zew czy wew i jaka jest szybkośc transmisji ?
  • #5 8132116
    marol_pm
    Poziom 11  
    Nie mam sie jak podłączyć do terminala ze względu na brak RS'a w kompie ;|
    Kwarc wewnętrzny, przestawiony na 8MHz
    Prędkośći baudrate na 19200
    Aktualnie jestem podłączony na samym pająku:

    uC --- C75
    GND---GND
    TxD---RxD(przez rezystor już 300ohm,Zener zmasowany, juz jest nap. 3,3V i nie resetuje tel)
    RxD---TxD (to wisi w powietrzu, bo ze względu na brak drugiego Zenera resetowal tel, ale podobno i tak sie tego chyba niewykorzystuje)
  • #7 8132224
    marol_pm
    Poziom 11  
    Witaj adambehnke
    Przeczytałem temat, ja zastosowałem diody od strony telefonu, więc jest ok, telefon się resetował przy 3,4V ! :/
    Teraz nawet udało mi się znaleźć drugiego Zenera 3V3 z innego układu, tak więc podłączyłem aktualnie 2 linie na których jest napięcie 3-3,3V :)
    Telefon się nie resetuje :)

    Załączam sposób podłączenia z elektrody,

    [ATtiny2313][C] telefon C75

    tylko ja mam rezystory 300ohm, bo reset był w dalszym ciągu :]
    oraz proszę się nie sugerować wyprowadzeniem pinów u mnie jest zgodny z pinout C75
    uC --- C75
    GND---GND
    TxD---RxD
    RxD---TxD

    Czyli teraz wnioskuję, że wina musi leżeć po stronie programu :(
    Wy działacie na Bascomie, to pewnie nie sprawdzicie poprawności kodu :/
  • REKLAMA
  • Pomocny post
    #8 8132373
    sulfur
    Poziom 24  
    Nie no zaraz zaraz.

    RX uC to jest to co odbiera dane, łączysz to bezpośrednio z TX telefonu ponieważ telefon i tak nie da więcej niż 3,3V a uC działa na 5V.
    TX uC to jest to co nadaje dane, i tutaj wychodzi sygnał 5V czego telefon nie przyjmie. Skoro układ z diodą nie działa najlepiej, użyj dzielnika napięcia szeregowo 2,4k, potem 2,7k do masy.

    Co do samego programu, niepotrzebnie sam liczysz BAUD_PRESCALE. Prościej mozna to zrobić tak, że na początku pliku gdzie robisz wszystkie include
    #define BAUD  9600
    #include <util/setbaud.h>
    


    A potem w funkcji inicjującej
    // Ustawienie prędkoœci transmisji
      UBRRH = UBRRH_VALUE; 
      UBRRL = UBRRL_VALUE;
    


    A co do poprawności kodu, moim zdaniem Twój USART w ogóle nie działa.
    Spróbuj w ten sposób:
    // Włšczenie nadajnika i odbiornika
    	UCSRB = (1 << RXEN) | (1 << TXEN);
      //UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
     
    	// Ustawienie formatu ramki:
    	// 8 bitów danych, 1 bit stopu, brak parzystoœci
    	UCSRC = (1 << UCSZ0) | (1 << UCSZ1) | (1<<URSEL);
    


    EDIT: nie korzystasz z przerwań z tego co zauważyłem więcUCSRB jest poprawne stare. Dodaj zatem tylko konfigurację UCSRC.
  • #9 8133362
    marol_pm
    Poziom 11  
    Dzieki sulfur

    Dziś już nie dam rady tego poprawić, bo priorytet ma inne urządzenie, z tym się już nie wyrobię, wrócę do tematu jak tylko dam radę!
    Najpóźniej we wtorek
    (wtedy edytuję tego posta)

    Serdecznie Pozdrawiam !
  • #10 8151862
    marol_pm
    Poziom 11  
    Witam,
    rozpracowałem to :)
    Połączyłem się w Terminalu z komórką przez kabel oryginalny Siemensa,
    AT
    OK
    dzwoniło wszystko pięknie ładnie :)
    Zrobiłem to tym razem na rozwojowej płytce na ATmega32 i zadziałało wyłączanie telefonu dopiero gry zamieniłem na DB9 Tx z Rx !!!
    Na ATtiny2313 też zadziałała ta zamiana pinów na DB9!!
    A dzwonienie dopiero odpaliło jak się wysyłało komendę:
    
     UART_SendString("ATD694XXXXXX;");
     UART_putchar(0x0D);
    


    oraz wysłanie tej komendy po naciśnięciu przycisku, albo innej rzeczy która załączy to :)

    Dziękuje Bardzo
    sulfur oraz adambehnke za cenne wskazówki !!!

    Serdecznie Pozdrawiam :)
REKLAMA