no tak zle napisalem.....20 bytes to jeden pomiar, ale w ciagu miesiaca wykonam ich kolo 50-200.(zalezy od ustawien uzytkownika) Stad pamiec 16 KB. Dlatego tez chce uzyc zewnetrzenej pamieci, bo w wewnetrznej nie pomieszcze tych danych. Wewnetrznej beda zawarte jedynie stringi ktore bedzie wyswietlal LCD i ustawienia programowe. Pamięć AT24C16 to jest...
Symulator w Atmel Studio 6.0. Twoje funkcje u mnie działają poprawnie, tzn dane z jednej są kopiowane do drugiej. To kopiowanie jest "bezmyślne" w sensie że, kopiuje obszar pamieci bajt po bajcie, bez znaczenia jest typ zmiennej. Może problem tkwi w dobieraniu się do pól struktury?
Zrobiłem serwer http, który czyta dane wysyłane z atmega (jakieś temperaturki). Jezeli jestes autorem skryptu zapisujacego dane na serwerze i mozesz dopisac sposob odbierania dasnych przez aplikacje w delphi, to mialem podobne doswiadczenia i rozwiazalem to w nastepujacy sposob: - po stronie serwera skrypt php, ktory w zaleznosci od pol zapisywal dane...
Dzięki ;) A może można jakoś inaczej wysyłać dane do ESP aby łatwiej było by to "obrobić" w LUA? Z ESP współpracuje z ATmega (BASCOM) i tam wysyłam dane tak: [syntax=vbnet] Print "temp_zew:" ; Temperatur ; " " ; "wilgotnosc:" ; Humid ; " " ; "cisnienie:" ; Luftdruck ; " " ; Chr(10) [/syntax]
A co jest po drugiej stronie? 250 kbps to niezbyt standardowa szybkość, więc może dla FTDI błąd jest istotny? Po drugiej stronie, jako nadajnik, jest xmega 128a3 taktowana wewnętrznym oscylatorem 32MHz. (at)Piotrus_999 - chodzi o plik INI sterownika ftdi? grko - oczywiście brałem pod uwagę błąd w kodzie, jednakże zdziwiło mnie to, że to się stało nagle,...
(at)Tojmak987123 Pomyśl - co dadzą ci wprowadzone zmiany? Nic. Bo problemem nie jest sama funkcja uart_getc, lecz sposób interpretacji jej wyniku. Czyli twoja pętla, która kompletnie ignoruje zwrócenie końca łańcucha.
Witam, Na dwóch ATmegach chciałem zrobić komunikację za pomocą UARTu. Miałoby to działać na zasadzie: jeśli ATmega odbierze string (hasło) np.: "1234" to wykona jakieś zadanie Kod nadajnika działa prawidłowo, potrafię wysłać string (kod w załączniku) Mam problem z kodem odbiornika, kod działa tak że reaguje tylko na znak, nie potrafi odebrać stringa....
WAIT 2. faktycznie - juz poprawione Mój ulubiony "kwiatek" :) Gosub Wybor Wybor: Potem mamy masę gosub'ów bez poprawnego wyjścia. gdybys konkretnie wyjasnil co jest nie tak. To nie watchdog tylko przepełnienie stosu. Chociaż i watchdog może w kilku przypadkach resetować, zwłaszcza tam gdzie jest Jak nie ma włączonego watchdoga program staje w miejscu...
Przy załączeniu napięcia atmedze na wyświetlaczu zamiast oczekiwanego napisu pojawiają się randomowe śmieci. Przy zwyczajnym resecie wszystko jest ok. Z resztą najlepie to widać na filmiku: //MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MA... portSHORT main(void) { //Inicjalizacja...
No właśnie nie wiem liczbowo jakie kąty ale jak na zime to mam za płasko na połaci nad tarasem bo na dachu jest trochę większy kąt i widać to bardzo ładnie w "Sunny Explorerze" napięcia na obu stringach potrafią się różnić nawet o 50V. Te CIGSy co testowałeś to były te Q.celle SL? Właśnie szału się nie spodziewam ale póki co to spłukany jestem i nie...
I znowu mam dziwy problem z moim led cube. Sprawa ma się tak że odczytuje plik txt z karty i jeden plik śmiga aż miło a drugi już nie :( Program działa tak: 1 otwieram plik .txt 2 pobieram z tego pliku pierwszą linijkę w której mam zapisane krotność powtarzania jednej klatki animacji. 3 kolejnych 8 linii to długie stringi które później dzielę na 3 znakowe...
OK... No więc sprawa jest dość prosta (przynajmniej jak jest już gotowa :) ) * Przede wszystkim potrzebne są tablice z konwersją ASCII 7 bit na ASCII 8 bit i z powrotem (chyba, że robimy monolog w jedną stronę). ODBIÓR * Odbieramy ciąg znaków -> pojawia się problem, bo Siemens C35i, tak jak większość modemów, wysyła i odbiera dane w trybie ASCII...
A dlaczego nie możesz użyć pgm_read_byte/word? Przy pomocy tych makr odczytujesz string aż do napotkania znaku NUL, który go kończy. Alternatywnie wymień strcpy na strcpy_P, tylko, ze wtedy funkcja będzie działać wyłącznie na stringach z FLASH.
Musisz o jeden większe robić jeśli przechowują stringi (tylko wtedy) i to na dodatek o jeden większe od długości stringu jaki chcesz w nich przechować. Chodzi o to, że dla stringów mamy zawsze ostatni znak końca stringu, którego w zasadzie nie widać ale musi on tam być.
Nie dziwne że twoja funkja nie działa, skoro odbierasz w niej JEDEN (słownie: 1) znak... stringi kończą się zwykle znakiem \n, czaem nawet kombinacją \r\n 4\/3!!
Za długie pętle lub za krótkie tablice zmiennych.
Za to Z KAŻDEGO !!! miejsca programu można sobie sprawdzić ile wolnych i jeszcze nie używanych komórek pamięci RAM pozostało - nie naruszonych ani przez stos ani przez zmienne globalne. Jeżeli w programie występuje nadpisywanie RAMu to można w dowolnym jego miejscu sprawdzać SP? Kiedy SP może się przepełnić, np w czasie przerwań albo wywoływania funkcji...
No tak, komputer odbiera je jako "suche" bajty, ale Labview, niejako z miejsca interpretuję je jako dane string. Na wyjściu bloczku "VISA Read" Mylisz stringi. To, czego spodziewa się klocek to string w postaci "3.1415". A string który dostajesz z atmegi to cztery bajty o jakiś tam wartościach które zostają zamienione na string w ten sposób, że każdy...
Hmm bardzo możliwe.Szczerze mówiąc nie zwróciłem na to uwagi. Wieczorkiem uproszczę tą procedurę. A pytanie: czy czasem te instrukcje : Instr(rs1_odebrane , "SYGNAL:") nie spowalniają wykonywania procedury? Można jakoś inaczej wyciągać interesujące nas dane z "odebranych stringów"?
gdzieś mi po drodze przewinęło się słowo manipulator.. zobacz jak ja to zrobiłem [url=https://www.youtube.com/watch?v=2Y7... transmisji szeregowej Malina - atmega.
To jest po to ze uzylem strncpy, ktora kopjuje nie wiecej niz n znakow. Jezeli zrodło jest dłuzsze to wynik będzie bez zera na koncu - czyli bedzie nie zakonczonym stringiem. Dlatego dla bezpieczenstwa ostatni znak stringu ostawiam na 0. Jest mniej kosztowne niz sprawdzanie strlen. Mozna ale musisz czytac i pisac po bajcie - nie dostanieszz takiego...
Chodzi o deklarację zmiennej data W tym przypadku wystarczy, że bufor data zadeklarujesz jako static. Masz tu jeszcze kilka błędów. Funkcja receive zwraca char a Ty próbujesz zwrócić char *. Dodatkowo w main próbujesz przypisać to co zwraca receive do tablicy buffer (co sie nie powinno skompilować). Spróbuj tak: [syntax=c] static const unsigned char*...
Próbujesz przepchać ramki CAN 125Kbps poprzez Serial 115.2k, jako stringi generowane z sprintf'a. E: Rzeczywisty transfer jest znacznie mniejszy, ale wciąż każdy bajt jest przesyłany jako 5 + wcześniejsze stringi. Nie wiem czy biblioteka do MCP będzie się wyrabiać, ale podbijanie prędkości uarta w Arduino kończy się gdzieś przy 300-500kbps. Z sprintf'em...
[syntax=c]TWI_write(pgm_read_byte( &cyferki[cy4] ));[/syntax] Mam tablicę znaków wyświetlacza "cyferki" a zmienną "cy1" - "cy4" wskazuje odpowiedni znak z tablicy. W buforze z RFM12 mam stringi a potrzebuje int aby wyświetlić znaki z tablicy.
sprawa banalnie prosta a o to przepis : Atmega8+LCD+MAX485 ,protokół sam możesz zrobić w bascom ,tą cześć raczej trudno nazwać protokołem ,raczej atmega zajmowała by sie odbiorem stringów które by latały po RS leprzy protokół wyglądał by tak : PC->AVR string+CRC PC<-AVR OK opisy znajdziesz na elce
A te dwa Stringi wysyła?
Witam, zmartwię cię: 1. to nie są stringi 2. sizeof() podaje poprawnie rozmiar :wink: Pozdrawiam, GSM
Uzupełnie kolegi BlueDraco post bo mozesz nie wiedzic o co chodzi. W C stringi maja są o jeden dłuższe niż ilość znaków poniewaz naa koncu jest jeszcze zero.
Czy ktoś posiada może bibliotekę do sterowania wyświetlacza graficznego http://www.elektroda.pl/rtvforum/topic43... świetny wyświetlacz, autor zamieścił swój kod, są tam jak dobrze pamiętam także funkcje do wyświetlania stringów na wyświetlaczu
Myślę, że nie jest poza zakresem, lecz na skutek braku formatowania nakładają ci się na LCD dwa stringi. W efekcie odczytujesz dziwną liczbę. Poza tym, zastanów się czy podstawa jaką wrzuciłeś (itoa(icr,bufor,5);) - czyli system piątkowy jest tym czego rzeczywiście oczekujesz.
Wygląda na przepełnienie stosu. Na początek wywal wszystkie stringi do FLASH, np. [syntax=c]__flash const char text[81]="ABCDEFGHIJKLMNOPRSTW" "NIE TA LINIA :( " " " "Maciek mowi: ";//PRSTUVWXYZabcdefghijklmnoprstuvwxyz1... [];'\\,./!(at)#$%^&*()`";[/syntax] i [syntax=c]snprintf_P(text, 21,PSTR( "%s%04d%02d%02d %02d:%02d:%02d "), dow, (uint16_t)time.year...
To taka trochę incepcja :P Trzeba skorzystać z podwójnego rozwinięcia makra. # zamienia na literał dlatego następuje magiczna zamiana na stringa. [syntax=c]xstr(__AVR_DEVICE_NAME__) -> xstr(Atmega8) xstr(Atmega8) -> str(Atmeta8) str(Atmega8) -> "Atmega8"[/syntax] Jakbyś zrobił bez podwójnego rozwinięcia to byłoby tak: [syntax=c]str(__AVR_DEVICE_NAME__)...
(at)michalek002a Tak, jak wspomniano wyżej, możesz umieścić stringi we flash. W ten sposób zaoszczędzisz całkiem sporo pamięci RAM. Dla przykładu, zamiast O tym wiem, ale RAMu mam zajęte tylko 35%, więc nie ma z tym problemu.
Szczerze to jeśli ktoś ma takie problemy to znaczy, że coś sobie zamotał i prawie na pewno da to się łatwiej rozwiązać. Nie da się tak zmiennych wstawiać jak ty chcesz ze stringów podczas działania programu. Jedyne takie kombinacje są dostępne za pomocą preprocesora.
Operacje na stringach mogą być niebezpieczne, szczególnie, jeśli dostajesz stringi z zewnątrz Poczytałem, faktycznie śliski temat. Rozumiem ryzyko. Ciekawe rozwiązanie problemu jest poniżej: 5. Te wywołania strcat() są beztroskie. Czy chodzi Ci o ryzyko jakie z tego płynie? Zauważ, że np "strcat(txframe,IMEI);" tctframe ma 230 bajtów a IMEI ma 15 jednak...
C trzyma stringi w postaci nullz, terminatorem stringa jest 0, tak samo w twojej funkcji wyświetlającej. Problem w tym, że w 2 bajtach masz dane i brak miejsca na 0. C nie zgłasza w takiej sytuacji błędu, gdyż semantycznie taki zapis jest poprawny. Więc tak jak kolega powyżej możesz zwiększyć wymiar tablicy lub wiedząc, że każdy string ma tylko 2 litery...
W sumie obojętnie jak to wyśle, byle po obu stronach była ta sama konwencja - czyli albo obie strony używają stringów, albo postaci binarnej. Z tego co pisze autor wynika, że nadajnik dokonuje konwersji na strin i przesyła dane, które odbiornik interpretuje jako dane binarne.
Przy okazji pytanie, czy każda operacja na stringach wymaga a by dany string był zakończony znakiem '\'? W języku C string to tablica znaków zakończona "null terminating character" którym jest "(char)0" albo inaczej zapisany '\0`. Wszystkie funkcje operujące na stringach wymagają aby ich parametry były C stringami (z małymi wyjątkami np strncpy) sizeof("1234")...
Problemem jest to, że tekst deklarowany jest jako tablica znaków, a inicjowany c-stringiem... const char PWRON[18] = "System URUCHOMIONY"; Definiujesz tablicę o długości 18 znaków i wpisujesz do niej ciąg 19 znaków (to jest c-string, więc jest tam już \0 na końcu ale wypada poza rozmiarem tablicy, stąd powinno być ostrzeżenie kompilatora). Gdybyś zadeklarował...
CID37 robi. lol ;)))) no i juz jest przeriobony wsad Atmegi dostepny tak wiec mozliwe ze za nieldugo bedzie dostepna usluga updatu Boxa poprzez NET do obslugi HWK (aplikacja ala JAF update czyli sewer-bufor-atmega-odp ze wszytsko OK) - zadnego wysylania, zadnego montowania itp. Teoretycznie tez mozna wygenerowac stringi do HWK i tez bedzie a z tym juz...
Witam, Przeczytałem wiele stron z podobną tematyką, próbowałem wielu różnych algorytmów, jednak nie udało mi się osiągnąć tego co chciałem. Założenie: Komunikacja aplikacji napisanej w visual c++ 2010 express z atmega16/32. 1. Wysyłka 5 liczb z komputera: (parametr1, parametr2, parametr3, parametr4, parametr5) na atmegę. Sprawa wydawałoby się prosta,...
A czy wiesz ile czasu ten Twój program może siedzieć w przerwaniu? Wygląda mocno nieoptymalnie to przeszukiwanie całego bufora. A to, że kod działa bez przerwań nie oznacza, że musi działać bez większych modyfikacji z przerwaniami. Możesz spróbować składać stringi w taki sposób jak podałem wcześniej, czyli zacząć od początku z innym podejściem, bo jak...
Wydaje mi się że nie opłaca się ładować tych 32 bajtów do eepromu , pewnie procedura odczytująca zajmie więcej miejsca. Ale :) można by tam coś innego władować, w eepromie masz coś około 500 bajtów wolnych. Wolne miejsce można by wykorzystać na teksty wyświetlane na LCD. Niektóre łańcuchy też się powtarzają. Często masz np . [syntax=basic4gl]Locate...
Dzięki Saabotaz, zrobiłem jak napisałeś. Okazało się, że problemem był *char do ktorego ładowałem stringi zmieniłem go char[] i ruszyło. Swoją drogą dziwne :)
Nie do końca jest tak jak piszesz. printf ze względu na argumenty jest dosyć specyficzną funkcją. W dodatku jej implementacja jest niebanalna, więc pisanie własnego ciała funkcji może być bardzo karkołomne. Dlatego właśnie korzysta się ze strumieni, żeby biblioteczna wersja printf robiła swoje (np. interpretowała stringi formatujące i generowała sformatowany...
Funkcja czekająca na odpowiedź z modemu powinna czekać skonczony czas na oczekiwany string, przy czym jest bardzo ważne to, aby oczekiwany string zawierał ostatnie znaki z całego stringu odpowiedzi modemu. W Twoim przykładzie gdy modem odpowiada: CMGS: 59 OK To modem tak naprawde wysyła znaki: CMGS: 59\r\n\r\nOK\r\n Funkcja czekająca na odpowiedź w...
Ja proponuję użyć RFM12B, albo RFM01/02. Posiadam te moduly i spedzilem wiele (naprawde wiele) godzin na probach uruchomienia ich. Niestety bezskutecznie. Byc moze moja wiedza programistyczna nie jest az na tyle zaawansowana. Przegladalem mnostwo materialow, i testowalem wiele softu ale nijak nie moge ich uruchomic. Dlatego przeszedlem na cos prostszego....
nie, funkcja nie ma możliwości wykryć jakiego typu dostała argumenty, i dlatego na przykład w funkcji printf typy są podane w pierwszym argumencie (który z góry wiadomo że jest stringiem) i dopiero kolejne argumenty są typów dowolnych.
A co w opisie w książce jest niejasne? Uwierz, to naprawdę prosta implementacja menu. Prościej, bez udziwnień się chyba nie da. Jak napisałem, żeby czytał i analizował przykład z ksiązki kol. tmf do skutku (czyli do czasu aż zrozumie) - to mój post wylądował w koszu. A jednak to była jedyna realna porada. Nie da się programować bez znajomości i rozumienia...
Z tym zerem jest tak, że jak tworzysz zmienna typu string (null-terminated) to ma ona automatycznie zakończenie w postaci 0 na końcu. Lecz jeśli zrobisz tablicę znaków i chcesz uzywać jako stringa to musisz dodać 0 na końcu (żeby było kompatybilne ze stringiem). Czyli każdy string = text+0 a tablica bedzie u ciebie tylko text, dlatego aby swobodnie...
stringi atmega atmega bascom stringi schemat stringi
beben drukarka podcisnienie silniku bezpiecznik termiczny
atmega8 programator wymiana kierunkowskaz polonez
Wentylator chłodnicy działa po zgaszeniu silnika, klikanie przekaźników, miganie świateł, rozładowany akumulator – MINI, VAG, Start-Stop BCK3501-854 Transformer Diagram for Milwaukee 48-59-1812, Bosch AL18 Chargers