Witam
Od pewnego czasu zajmuje się komunikacją ATMEGI 328P i komputera poprzez popularny prot COM. Napisałem własny program w C++, który odbiera pewne dane od ATMEGI. W programie użyłem struktury DCB Winapi. Jako, że Atmega nie odzywa się nie pytana użyłem timera, który sprawdza czy przypadkiem coś nie przyszło. Poniżej kod, którego używam (dla komputera)
Port otwiera się prawidłowo i bez większego problemu mogę wysłać dane do atmegi problem pojawia się kiedy Timer próbuje odczytać dane z bufora i zapisać je do tablicy lpBuffor_read. Cały program się zawiesza (tzn zewnętrzna powłoka nigdzie nie mogę kliknąć nie mogę zamknąć programu) a port dalej zostaje otwarty a dane prawidłowo wysyłane i odbierane (zakładając, że coś przyjdzie).
Najdziwniejsze, że jest to, że wystarczy otworzenie portu np w ARDUINO IDE zamknięcie go i wszystko działa jak należy aż do ponownego uruchomienia przejściówki/restartu komputera.
Atmega ma osobne zasilanie z stablizatora 5v a pomiędzy przejściówką a atmega jest tylko wspólna masa.
Od pewnego czasu zajmuje się komunikacją ATMEGI 328P i komputera poprzez popularny prot COM. Napisałem własny program w C++, który odbiera pewne dane od ATMEGI. W programie użyłem struktury DCB Winapi. Jako, że Atmega nie odzywa się nie pytana użyłem timera, który sprawdza czy przypadkiem coś nie przyszło. Poniżej kod, którego używam (dla komputera)
//inicjacja zmiennych
static DCB dcb;
static HANDLE hNumPort;
static char lpBuffor_read[33], lpBuffor_write[33];
static DWORD RS_ile;
//otwarcie portu
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = CBR_9600;
dcb.fParity = TRUE;
dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 7;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
//polecenie sprawdzenia i zapisania nowych danych do tablicy zmiennych lpBuffor_read
ReadFile(hNumPort, lpBuffor_read, 15, &RS_ile, 0);
Port otwiera się prawidłowo i bez większego problemu mogę wysłać dane do atmegi problem pojawia się kiedy Timer próbuje odczytać dane z bufora i zapisać je do tablicy lpBuffor_read. Cały program się zawiesza (tzn zewnętrzna powłoka nigdzie nie mogę kliknąć nie mogę zamknąć programu) a port dalej zostaje otwarty a dane prawidłowo wysyłane i odbierane (zakładając, że coś przyjdzie).
Najdziwniejsze, że jest to, że wystarczy otworzenie portu np w ARDUINO IDE zamknięcie go i wszystko działa jak należy aż do ponownego uruchomienia przejściówki/restartu komputera.
Atmega ma osobne zasilanie z stablizatora 5v a pomiędzy przejściówką a atmega jest tylko wspólna masa.
Code: cpp