Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programator optoizolacyjny inne RS232 UART AVR soft linux

trol.six 11 Wrz 2020 21:47 1473 4
  • Programator optoizolacyjny inne RS232 UART AVR soft linux

    W temacie prezentuje:
    1. Programator optoizolacyjny albo jak kto woli przejściówka do programowania ;)
    2. Program na linuxa do programowania avr przez ISP
    3. Inne schematy i konfiguracje działające z tym programem.

    Może zaczne od wad :) Wszystko co tutaj prezentuje to względnie proste sposoby realizacji programowania mikrokontrolerów AVR z wykorzystaniem ISP, przez takie interfejsy jak RS232 lub UART (np. przejściówka USB RS232 UART).

    1. Wyjścia są albo kolektorowe z podciąganiem, albo na sztywno, albo z diodą
    2. Ze względu na działanie bit-bang prędkości nie oszałamiają :)

    Niemniej jednak dające się używać w wielu przypadkach i jako dodatkowy sprzęt dla mnie przydatny.

    ----------------------------------------------------------------------------------------------------------------

    Programator optoizolacyjny inne RS232 UART AVR soft linux Programator optoizolacyjny inne RS232 UART AVR soft linux Programator optoizolacyjny inne RS232 UART AVR soft linux

    Jak widać nic nadzwyczajnego, transoptory CNY17-3, D1 D2 D3 diody zabezpieczające przed ujemnym napięciem, zastosowałem LEDy. Diody LED D4 i D5 (czerwona, żółta lub zielona) nie są konieczne, jednak oprócz tego że sygnalizują sygnał, poprawiają troszkę szybkość, R15 R16 R17 zabezpieczają tranzystory przed nadmiernym prądem. Przejściówka wymaga do odczytania stanu z CTS stanu wysokiego na RTS co realizuje program.

    Szybkość przejściówki można byłoby poprawić stosując mniejsze rezystory, ale nie chciałem obciążać już wyjść oraz zwiększać możliwego wydzielania większej mocy na rezystorach.

    Programator podczas nie działania stale ma reset zwarty do masy, co powoduje że mikrokontroler jest w stanie resetu i trzeba odłączyć programator. Można zamienić sygnał CLK z RST i wtedy nie będzie w stanie resetu w zamian za zwarty pin SCK. W programie zamiast RSOPT1 należy podać RSOPT2.

    Przejściówka przenosi prostokąt 50% 50kHz, ale już z innym wypełnieniem.

    Jak pisałem, z racji że są to wyjścia z podciąganiem rezystorowym nie da się zaprogramować np arduino bez przeróbek, ponieważ tam na pinie SCK jest dioda LED z rezystorem <1kom wpięta do masy. Można więc tutaj dać bufory bramkowe, albo przerobić układ z tranzystorami pnp-npn. Prawdopodobnie przejściówka USB-UART gdzie wyjścia mają większa obciążalność byłaby skuteczniejsza.

    --------------------------------------------------------

    Program arudet, taką sobie nazwe wymyśliłem, czyta opcje podobnie jak avrdude, może też czytać konfig z avrdude, opcje:

    -p typ mikrokontrolera (np: m8)
    -U pamięć:akcja:plik:format
    Program czyta pliki formatu hex oraz binarnym
    np: lfuse:r:lfuse.bin:b
    -c typ programatora, przejściówki:
    UART1, UART2, UART3, UART4, RSOPT1, RSOPT2, TRSPR1
    -P ścieżka do portu
    -b szybkość portu RS
    -i czas stanu bitu w mikrosekundach
    -e kasuj chip
    -F ignoruj sygnaturę
    -D nie kasuje flash przed zapisem (domyślnie kasuje)
    -h wyświetl pomoc
    -C plik z konfiguracją, program w pamięci ma tylko kilka uk reszte czyta z konfigu avrdude z /etc/avrdude.conf, można podać inną lokalizacje
    -x podwaja prędkość - widać to dla konfiguracji gdzie TxD steruje CLK (RS232), w zasadzie nie ma przyspieszenia dla przejściówek USB->UART

    Przykładowe polecenia na RS232:

    Cytat:
    arudet -p m8 -U lfuse:r:lf.bin:b -P /dev/ttyUSB0 -b 9600 -c UART1
    arudet -p t13 -U flash:w:lf.bin:b -P /dev/ttyS0 -b 19200 -c RSOPT2 -x
    arudet -p t15 -U flash:w:lf.bin:b -P /dev/ttyS0 -b 19200 -i 10 -c RSOPT1

    Program wyświetla co robi plus dla flash i eeprom przewidywany czas do zakończenia.

    Program nie obsługuje masek bitowych dla fusebitów. Czyli zapisuje to co ma.
    Nie zapisuje pamięci flash mikrokontrolerów >128kb. I nie weryfikuje fusebitów, ani ich poprawności dla rodzaju.

    W przypadku komunikatu podobnego do:
    bad: 0xXX
    oznacza to błędy w komunikacji i możliwość błędu.

    --------------------------------------------------------

    Uzyskałem takie czasy odczytu ATtiny15 1 KByte flash









    RSOPT16.4s (txd -> rst)
    RSOPT211.3s -x (txd -> clk)
    RSOPT216.0s
    UART19m 28.0s (txd -> rst)
    UART23m 25.7s (txd -> clk)
    TRSPR17.5s - x
    TRSPR110.8s


    RSOPTx - prezentowany w tym wątku
    UARTx - usb->uart FTDI FT232RL
    TRSPRx - inna

    polecenia do testu (szybkości graniczne):
    Spoiler:
    ./arudet -p t15 -U flash:r:fl.bin:b -P /dev/ttyS0 -b 19200 -i 5 -c RSOPT1
    ./arudet -p t15 -U flash:r:fl.bin:b -P /dev/ttyS0 -b 115200 -i 5 -c RSOPT2
    ./arudet -p t15 -U flash:r:fl.bin:b -P /dev/ttyS0 -b 115200 -c TRSPR1
    ./arudet -p t15 -U flash:r:fl.bin:b -P /dev/ttyUSB0 -b 57600 -c UART1
    ./arudet -p t15 -U flash:r:fl.bin:b -P /dev/ttyUSB0 -b 57600 -c UART2 -x


    przykładowy zrzut
    Spoiler:
    Code:

    --------------------------------------
    mem type         : lfuse
    what do          : r
    filename         : fl.bin
    format           : b
    chip             : t15
    hardwn           : UART1
    port             : /dev/ttyS0
    delay            : 0 us
    baudrate         : 57600 kHz
    --------------------------------------
    find avrdudeconf : t15
    decsription      : ATtiny15
    signature        : 1e 90 06
    eeprom siz       : 64
    eeprom block     : 64
    flash siz        : 1024
    mode             : 0x04
    flash block      : 128
    eepagenmb        : 0
    fpagenmb         : 0
    --------------------------------------
    delay            : 190 us clk: 2631 Hz
    YES enter in program operation
    file fl.bin exist overwrite
    signature : 1e 90 06
    read flash memory
    adr bytes: data  estimated time remain
    adr 000000: ffffffffffffffff   0 min  6 s
    adr 000008: ffffffffffffffff   0 min  7 s
    adr 000010: ffffffffffffffff   0 min  6 s
    adr 000018: ffffffffffffffff   0 min  6 s
    ...



    Inne schematy podłączeń
    Programator optoizolacyjny inne RS232 UART AVR soft linux Programator optoizolacyjny inne RS232 UART AVR soft linux

    --------------------------------------------------------

    Jak pisałem prezentuje tutaj proste konstrukcje, jeśli ktoś jest zainteresowany mogę zaprezentować bardziej skomplikowane tego typu rzeczy. Mające inne wady ;)

    --------------------------------------------------------

    Program będzie także dostępny: https://gitlab.com/trolsix/arudet/

    W załącznikach schematy, program: źródła plus binarki dla 32-bit dla liuxa.
    Program wersja 0.0.9 , tak oględnie testowałem, ale będe jeszcze mu się przyglądał.
    Proponuje się nie rzucać jeśli ktoś boi się zablokować fusebity ;)

    PCB nie wrzucam bo za dużo błędów.
    .

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
  • #2
    kaczodp
    Poziom 11  
    D4 i D5 nie mają rezystorów ograniczających prąd.
    Dioda w U4 bez bufora.

    trol.six napisał:
    Przejściówka przenosi prostokąt 50% 50kHz, ale już z innym wypełnieniem.

    CNY17 są wolne. Do 20kHz jakoś to działa ale z MIDI (38kHz) już nie. Wątpię w poprawną pracę na 50kHz zwłaszcza przy niskim napięciu. R12 ma dużą wartość i przy 3,3V (AVR może pracować już od 2 a nawet mniej) to pewnie 5kHz będzie problemem.

    Programator będzie bardzo wolny, przy programowaniu kilkudziesięciu kB trzeba być cierpliwym. Są sprawdzone i szybkie rozwiązania na ADUM14.
  • #3
    trol.six
    Poziom 31  
    kaczodp napisał:
    D4 i D5 nie mają rezystorów ograniczających prąd.

    Bo tu nie ma być rezystorów.

    kaczodp napisał:
    R12 ma dużą wartość i przy 3,3V

    W sumie racja. Ze względu na niższe napięcia powinien być mniejszy. Bo jest już na pograniczu.

    Wolne czy szybkie to są pojęcia relatywne. To nie jest przejściówka uniwersalna tylko o specyficznym zastosowaniu. W innych może się nie sprawdzić.

    Główne założenie: ma być względnie prosto. Większa szybkość w tym przypadku jest niekonieczna i mi nie potrzebna. Jak będe czegoś szybszego potrzebował to też zrobie to lepiej.

    A jesli ktoś ma większe wymagania zrobi to sobie inaczej. Chętnie obejrze jakiś inny projekt na elektrodzie nadający się do programowania.
    .
  • #4
    kaczodp
    Poziom 11  
    trol.six napisał:
    kaczodp napisał:
    D4 i D5 nie mają rezystorów ograniczających prąd.

    Bo tu nie ma być rezystorów.

    Układ nie uszkadza sie bo decyduje wiele czynników jak wydajnośc zasilania, porzeciążenie LED, przeciążenie transoptora albo niepełne otwarcie fototranzystora przez RS232C spowodowany napięciami +/-5V albo +/-9 pochodzącymi z przetwornicy pojemnościowej, której wydajność niekoniecznie jest zgodna z norma +.-20mA. Z pewnością w innych warunkach +/-12V z zasilacza komputerowego itd coś się uszkodzi prędzej czy później.
  • #5
    trol.six
    Poziom 31  
    kaczodp napisał:
    +/-12V z zasilacza komputerowego itd coś się uszkodzi prędzej czy później.

    Myśle że nie. Transoptor musiałby mieć CTR ponad 400%. Jeśli komuś wpadnie taki transoptor w ręce, wystarczy dobrać większe rezystory na jego wejściu. Z noty katalogowej CNY17-3 typowo CTR 100-250 i to dla troche wyższego prądu diody.
    .