Skocz do zawartości

Adapter na CH341 i Arduino Pro Mini


Pomocna odpowiedź

Napisano

Witam,
mam taki mały problemik. Kupiłem sobie adapter usb<->ttl/I2C na CH341 oraz Arduino Pro Mini (klon) i mam problem z komunikacją przez Serial. Wiem że się zagapiłem i adapter ten nie ma wyjścia restart i przy programowaniu trzeba wcisnąć przycisk resetu na arduino, ale to nie w tym problem. Kiedy próbuję wysłać jakikolwiek ciąg znaków przez Serial to w konsoli dostaje różne ciekawe znaczki, zazwyczaj o kodzie ASCII większym od 127 (dec). Jakieś pomysły skąd takie cuda?

kod i prędkości są dobre na 100%. próbowałem już z różnymi prędkościami i zawsze jest ten sam efekt.

void setup() {
 Serial.begin(300);
 pinMode(13, OUTPUT);
}


void loop() {
 digitalWrite(13, HIGH);
 delay(200);
 digitalWrite(13, LOW);
 delay(200);
 digitalWrite(13, HIGH);
 delay(200);
 digitalWrite(13, LOW);
 delay(2000);
 Serial.print("a");
}

Uruchomiłem na Arduino Leonardo - działa, więc przyczyny należy szukać gdzie indziej.

Pokaż jeszcze link do tego klona może 🙂

Układ CH341 jest interfejsem zamieniającym USB na kilka możliwych standardów: I2C, UART, ParallelPrinterPort i jeszcze jakieś. W najprostszym przypadku wybór następuje poprzez prawidłowe zezworkowanie odpowiednich pinów układu. W przypadku istnienia na płytce małego EEPROMu konfiguracja pobierana jest z niego. Nie wiem co masz na tej przejściówce, ale na zdjęciu widzę zworki. Aby CH341 działał w trybie UART piny SCL/SDA służace do podłączania EEPROMu konfiguracyjnego muszą wisieć w powietrzu. Może znajdź jakiąś instrukcję do tej płytki lub choćby schemat, przejrzyj ustawienia zworek i ew. popraw.

Jeżeli zmieniasz szybkość interfejsu COM w okienku terminala w PC a przychodzące znaki nie zmieniają się, na 99% nie pracujesz w trybie UART.

EDIT: Jeżeli jednak się zmieniają, pozostaje szybkość zegara procesora. Z jaką częstotliwością rzeczywiście pracuje Twój procek (najlepiej sprawdź programatorem fuse bity) a jak masz ustawioną wartość symbolu F_CPU?

  • Pomogłeś! 1

Przejściówka pracuje w trybie UART, mogę wgrać program jeśli zrestartuje arduino w odpowiednim momencie. Zachęcony Twoją wypowiedzią zmieniłem prędkości i znaki się zmieniały, lecz nie zgadniecie co się stało. Po zmianie szybkości na 19200 bodów komunikacja zaczęła działać prawidłowo. Ciekawe co jest przyczyną takiego dziwnego zachowania. Jakieś pomysły?

EDIT: niestety nie mam możliwości sprawdzenia tego, mam tylko tą przejściówkę, ale na ten moment już wszystko działa.

Nadal jest problem tylko udajesz, że go nie widzisz. Jeżeli w programie ustawiasz 9600 a terminal pracuje na 19200 i się dogadują to znaczy, że procesor pracuje 2 razy szybciej niż "myśli" kompilator. W związku z tym źle będzie działało wszystko związane z pomiarem czasu, opóźnieniami, prędkościami itd np. transmisje RC5, wszelkie delay'e, UARTy itp. Musisz odszukać w swoim IDE parametr F_CPU i zmienić go na prawidłowy czyli taki, z jakim zegarem naprawdę pracuje Twój procesor. Weź sprawdź, czy pin zmieniany funkcją digitalWrite rzeczywiście mruga dokładnie tak jak mu kazałeś i czy 2000 oznacza 2 sekundy a nie 1.

kolejny raz miałeś rację. Nie zwróciłem nawet uwagi, że 2 sekundy to w rzeczywistości 1 sekunda. Zmieniłem z 8MHz na 16 i wszystko teraz działa na prawidłowej konfiguracji. Wielkie dzięki 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...