Stwórz 3 elementową tablicę wskaźników na tablice; unsigned char PROGMEM *buzia = {buzia0,buzia1,buzia2}; a następnie przekazuj jakoś tak: lcd_send(pgm_read_byte((buzia[a])[][]); Kod poglądowy pewnie nie zadziała od razu :)
Marnowanie pamięci....
Spróbuj: glcd_str_P((char *)pgm_read_word(&menus[idx]));
Czy da sie zmienic zawartosc tablicy zdefiniowanej w pamieci programu (np char TABLICA [] PROGMEM = " blablabla") podczas dzialania programu?? Wydaje mi sie, ze nie ale chcialbym sie upewnic.
Spróbuj zadeklarować tablicę 7x3, czyli 7 elementów trzy znakowych (do stringów potrzebny jest jeszcze znak null). [syntax=c]const char text_w_rom11[7][3] PROGMEM = {{"Pn"},{"Wt"},{"Sr"},{"Cz"},{"Pt"},{"So...
Tak powinno być dobrze const char *bufor[8] = ... ale napisz jaki mikrokontroler, dla AVR należy odpowiednio użyć atrybutu PROGMEM.
// tablica "napis" znajduje się w PROGMEM - w kodzie jest pgm_read_byte: OK char napis[] PROGMEM = {"test"}; // zmienna "text"również jest w PROGMEM: wywołanie fun(text.wsk) odwołuje się do złej pamięci t_text text PROGMEM = {napis}; zamień: fun( text.wsk ); na coś pokroju:...
Jeśli zrobiłem tablice globalne, to przy wykorzystaniu pamięci RAM 83,6% jeszcze działało, Natomiast gdy zwiększyłem tablice i pamięć wynosiła 86% to już przestało działać ;D Funkcja która wysyła dane na kartę wygląda tak: passing argument 2 of 'f_write' makes pointer from integer without a cast Czym jest to spowodowane?
Musisz uzyc polecenia PROGMEM np const char tablica1[] PROGMEM="cos tam";
Przesadzone! Nie zgadzam się. Po to wymyślono struktury, aby je stosować. Jeśli ktoś chce - może wszystko zapamiętywać jako tablicę char-ów (bajtów) - wszak tak jest zorganizowana pamieć 8-bitowców, prawda? Tylko po co sobie utrudniać życie? Zadeklaruj stałą tablicę w PROGMEM, a ze struktury odnoś się przez wskaźnik. Kolega słusznie zauważył. Tablicę...
Szybki wstęp to takiego menu: Oznaczamy na potrzeby programu każdą pozycję w menu: enum{ 0, menu1, menu2, menu3, menu11, menu12, ...}; tworzymy tablicę przejść menu unsigned char menu_stage [32][4] PROGMEM = { // next prev up down {0,0,0,0}; {}; {}; {}; {}; } nieistotne...
a co masz w deklaracji tablicy czcionki? taki zapis: static const char font5x8[] PROGMEM = { ... } ???
Jednakże potrzebowałbym stworzyć takie menu w którym użytkownik wybiera sobie język i myślałem żeby rozwiązać to w taki sposób, aby każdy z tekstów był tablicą dwuwymiarową... A dlaczego to miałoby nie działać? Po prostu jako tekst związany z daną pozycją menu dajesz wskaźnik do tablicy, a w programie masz zmienną globalną określającą nr języka (indeksu...
Proszę o pomoc. Używam AVR Studio7 i pierwszy raz próbuję skorzystać z pamięci programu do zapisania i odczytów tekstów. Moje dotychczasowe próby kończyły się niepowodzeniem. Poniższy kod kompiluje się bez błędów ale z odczytem było już tylko źle. [syntax=c] #include <avr/io.h> #include <avr/pgmspace.h> int main (void) { static const char...
char FontTable[97][8] PROGMEM = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // (blank) //0 (...) }; i RAM będzie wolny :wink:. I pamiętaj że do czytania takiej tablicy musisz wykorzystać wbudowane w winAVR pgm_read_byte(address_short);
Dodam tylko że ta tablica nie pomieści tylu znaków: char PROGMEM tab2[] = {"Zmienna:"}; A dlaczego ta tablica nie pomieści tylu znaków? Z czego to wynika że nie pomieści?
(...) .db "Jakis napis",0x0a,0x0d, 13,12, 0 lpm acc, z (lub z+) A co to za potworki? Znak końca linii (i do tego windowsowy :/) też nie jest potrzebny, wystarczy samo zero, chyba że urządzenie komunikuje się z windowsowym terminalem tekstowym przez rs-232. I skąd się wziął akumulator w AVR? W C robisz tak (avr-gcc): #include <avr/pgmspace.h>...
Lepiej wykorzystaj do tego celu pamiec programu , ewentualnie eeprom. Sposob deklaracji tablic dla winavr : dla eeprom : #include <avr/eeprom.h> #define EEPROM __attribute__ ((section (".eeprom"))) unsigned char temp [20] EEPROM ={1,2,3,4,}; dla pamieci programu : #include <avr/pgmspace.h> static unsigned char temp_1 [2] PROGMEM = {1,2,3,4};
Atrybut progmem wymusza włożenie do sekcji tylko do odczytu, a tylko do odczytu może być zmienna const. Inną mógłbyś próbować zmienić, a tak się nie da. A w jaki sposób zmienić lang_polish? Nazwa tablicy jest stałym wskaźnikiem do pierwszego jej elementu (o ile pamiętam z książek i studiów). Nie da się w programie zrobić tak, żeby tablica zawierała...
Jeśli to GCC (a wszystko wskazuje, że tak) to musisz na początku dodać: [syntax=c]#include <avr/pgmspace.h>[/syntax] Tablice deklarujesz tak: [syntax=c]unsigned char logo_bmp[] PROGMEM ={....[/syntax] Przekazanie tablicy do funkcji najlepiej robić przez wskaźnik do tablicy (w c sama nazwa tablicy to wskaźnik do jej pierwszego elementu). Czyli:...
Aby zoptymalizować program możesz rozważyć poniższe podpunkty: 1)Mozesz dać tablicę do flash-a.wystarczy dołączyć plik nagłówkowy <avr\pgmspace.h> sposób definicji zmiennej ładowanej do flash: np. static unsigned int LCD_SegTable[] PROGMEM = { 0xEAA8, // '*' 0x2A80, // '+' 0x4000, // ',' 0x0A00, // '-' 0x0A51, // '.' Degree sign 0x4008,...
Witam serdecznie Trochę czasu już spędziłem na poszukiwaniach, ale niestety bez rezultatów. Poszukuję narzędzia (programu) który konwertował by pliki dowolnego formatu, na ich odpowiednik w postaci tablicy hex w języku c do umieszczenia w pamięci programu. Chodzi mi o zapis w formacie: [syntax=c] const PROGMEM unsigned char tablica[]={ 0x1a, 0xff, ......
Ten procesor ma tylko 128 bajtow RAM, a twoja tablica ma 6*24=144 bajty. Zainteresuj sie atrybutem PROGMEM i umieszczaniem stalych w pamieci FLASH.
A moze tak send(PSTR("Falomierz V2.0")); a gdzies tam deklaracja send void send(u08 *pBuff) { while(PRG_RDB(pBuff)) putc(PRG_RDB(pBuff++)); } ewentualnie typ prog_char prog_char a[]="Ala ma kota"; i chyba PROGMEM powoduje umnieszczenie tablicy sekcji .text...
[syntax=c]void CPY_FLASH_RAM (char *TAB)[/syntax] a do [syntax=c]char BUF_LCD[33] = "a"; char TX1[32] PROGMEM = "abcdefghijklmnop1234567890123456"; [/syntax] się nie czepia?
Porobiłem wszystko tak jak trzeba ale mam pytanie. W programie mam przerwanie zewnętrzne. Gdzie takie przerwanie umieścić? Teraz mam tak, że mam plik przerwania.h i tam znajduje się to przerwanie (SIGNAL(SIG_INTERRUPT7){}. Czy dobrze? Nie mam do tego pliku przerwania.c, chyba nie jest potrzebny? Mam też tablicę w pamięci procka (const PROGMEM unsigned...
Dzięki za przykład działa dobrze, tylko nadal mnie zastanawia czemu to nie działa, tym bardziej że ten kod powyżej jest o wiele łatwiejszy. Chyba wartość kodu ocenia się w pierwszej kolejności na podstawie jego skuteczności, a nie tego, czy jest łatwiejszy. No bo co z tego, że jest łatwiejszy, jeśli nie działa? Przykład, który podałem nie jest mojego...
Podpowiedź: Definicja tablicy we fleszu: char WCholereDuzaTablica[1000] PROGMEM = {/*tutaj wartości*/}; I odczyt wartości: Zmienna = pgmReadByte(&WCholereDuzaTablica[... Mega8 ma 1 kB SRAMu, nie wciśniesz tam tej tablicy, bo jeszcze stos i inne zmienne gdzieś muszą się zmieścić.
Może tak ? : LCD_DisplayPicture(*Obraz, 0, 0, 25, 7) Tak na pewno nie jest dobrze. *Obraz to liczba (z początku tablicy, czyli 0), a potrzebujemy wskaźnika. Nie wiem, czy dobrze mi się wydaje, ale dogm_core_data(pgm_read_byte(dpt... Nie inkrementuje zmiennej dptr sam z siebie. Spróbuj to zmienić na: dogm_core_data(pgm_read_byte(dpt...
Dzięki. Zrobiłem osobny plik wyswietlacz.h. Podlinkowałem w main.c i wyswietlacz.c Deklaracja wysw_bufor ../wyswietlacz.h:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'PROGMEM' oto tablica: // tablica znaków wyświetlacza unsigned char tab_znakow[20] PROGMEM = { 0b11011101, 0b10000001, // 0 , 1 0b10111100,...
(at)tmf: ...ale autor tematu napisał, że print_str(strr też mu nie działa prawidłowo. Myślę, że prawdopodobnie kompilator ma problem z określeniem rozmiaru struktury i - co za tym idzie - obliczeniem wskaźnika do następnego elementu tablicy struktur. Proponuję dodać w strukturze rozmiar ciągu znaków: Musisz to tylko przerobić na swoje potrzeby, czyli...
Witam Chcę aby tablice Z1...Z5 były zapisane w pamięci programu, różnią się rozmiarem pomiędzy sobą: const char Z1[] __attribute__((__progmem__)) = {...}; ... const char Z5[] __attribute__((__progmem__)) = {...}; Tutaj mam tablice wskaźników również zapisaną w pamięci programu const char* TABLICA_WSKAZNIKOW[] __attribute__((__progmem__)) = { Z1, Z2,...
Oj! Rzeczywiście, przecież tablica cmds też była PROGMEM , a nie była właściwie odczytywana (a palnąłem, że „powinno działać” :oops: ). pytanie więc brzmi czy cmd? znajdują się w RAMie czy też w pamięci programu. Tylko w pamięci programu. Ciekawe dlaczego to składowanie tablicy w pamięci programu nie działa właściwie. Może chodzi o to, że...
hmm, a nie powinno być: unsigned char klocki [x][y][z][a&... PROGMEM={...};
Jak w temacie. Mam zdefiniowaną tablicę: extern unsigned char Fonts Nie bardzo rozumiem , co oznacza powyższy zapis.Tablica jest albo "na zewnątrz" , albo "wewnątrz" , a nie i tak i siak.Ja robię to tak: plik.s .globl Fonts .section .progmem.data Fonts: .byte 1,2,3,4,5,6 .byte 11,22,33,44,55,66 plik.c ... //deklaruję extern char Fonts [2]...
Przykład zapisu tablicy w pamięci flash i trzymania jej tylko tam: unsigned char temp[3] PROGMEM = {0,1,2}; aby odczytać dane z takiej zmiennej wykorzystać należy polecenie postaci: data = pgm_read_byte(&temp[j])
OK. To moze tak: #include <avr/io.h> #include <avr/pgmspace.h> #include "tab.h" char wysylaj = 0xAA; uint8_t i = 0; uint32_t j = 0; uint8_t licznik = 1; void SPI_MasterInit(void) //inicjalizacja SPI { /* Set MOSI and SCK output, all others input */ DDRB = (1<<DDB2)|(1<<DD... /* Enable SPI,...
Witam Mój projekt polega na komunikacji przez moduły NRF24L01 podłączone do dwóch Atmeg (16 i 32). Nadajnik wysyła z tablicy np. [syntax=c]const char wej1[] PROGMEM = "WEJ1";[/syntax] odbiornik odbiera taką funkcją, która jest częścią biblioteki [syntax=c] void parse_nrf_data( char * buf, uint8_t len ) { if (!strcmp_P( buf , wej1)) { WEJ1 |= WEJ1; }...
O mem copy nie słyszałem, więc może nie będę się zagłębiał, Stosując mają pętlę wszystko działa, ale zajmuje strasznie dużo pamięci. Pomyślałem sobie zrobie to tak: do tablicy przetrzymującej obrazek dodam PROGMEM, Czyli mam [syntax=c]unsigned char PROGMEM obrazek[504]={0x00,0x00, ...CIACH..,0x00}; [/syntax] Oraz moja pętelka:[syntax=c] for (uint16_t...
mam problem, a mianowicie nie wiem jak usunąć błąd, aby program dobrze działał. Program ma wybierać język w którym będziemy się dalej posługiwać. Dziękuję z góry za pomoc. W kodzie ( na samym dole w komentarzach ) jest napisane jaki błąd wyskakuje przy const char *phrase = pgm_read_word(¤t_language prog_char NEWLINE[] = {'\n','\r',0};...
Kondensator co wspominasz o nim to jes podłączony rozumiem do masy jednym biegunem a drugim do portu ? NIE NIE NIE ABSOLUTNI NIE! Kondensator wpięty jest szeregowo pomiędzy portem a diodą nadawczą optotriaka. Dlatego na porcie musi być wystawiany sygnał prostokątny a nie stan wysoki lub niski. Ale dzięki temu zyskujesz 100% pewności na wypadek awarii...
(at)ElektrodaBot jak dodać większą czcionkę np. font16x16 do biblioteki arduino TVout? Bezpośrednia odpowiedź na pytanie - Aby dodać większą czcionkę (np. 16×16) do biblioteki Arduino TVout, należy przygotować własną tablicę danych (bitmapę) dla poszczególnych znaków i zaimportować ją do biblioteki jako czcionkę w formacie PROGMEM. - Następnie w plikach...
Porównaj, komentarz chyba zbędny. #include <avr/pgmspace.h> const char st_w_RAM[]="abcd"; const char st_w_ROM[] PROGMEM ="tekst w pamieci flash"; Nie tylko tablice znaków: const float PI PROGMEM=3.14159; const float PARAMETRY[3] PROGMEM={1.212, 2.4, 3.56};
Nie odpowiedziałeś na zadane pytanie. Czy przy dużych i przy małych obrazkach używasz dokładnie tego samego kodu? Podmieniasz dane w tablicy, czy całe tablice, tak że jest szansa, że w którejś z nich zgubiłeś PROGMEM? Czy wspomniane "duże obrazki" to również Twój wyrób, czyli wygenerowana w ten sam sposób tablica? Czy jakaś grafika z przykładów? Dodano...
Niestety nie mam żadnego filmiku. Sprawuje się REWELACYJNIE. Za to podrzucę Ci gotowca bo ten na stronie wymaga sporo poprawek i domysłów co gdzie jest. Jest to wersja pierwotna która przechowuje w tablicy RAM. Funkcje których tutaj nie ma robią: LCDINIT - inicjalizacja wyświetlacza LCD_POS - ustawia pozycję: wiersz, kolumna LCD_CLS - czyści ekran LCD_PSTR...
Obliczenia są +/- poprawne, pod warunkiem, że procesor rzeczywiście jest taktowany 12,8MHz. Domyślnie atmega8 działa na wewnętrznym rezonatorze 8MHz który jest dodatkowo dzielony przez 8. Żeby to zmienić musisz przeprogramować fuse bity. Najlepiej to zacznik od uzyskania częstotliwości 1Hz na jakimś pinie - miganie LED przy czasach rzędu 3,1ms dość...
W nawiązaniu do porad kolegi tmf proponowałbym coś w tym stylu (być może strach przed kwalifikatorem __flash wynika z braku przykładów kodu :?: : [syntax=c] // przykład jak używać kwalifikatora __flash do umieszczania // danych w pamięci programu i jak się do nich odwoływać // kod gotowy do odpalenia w symulatorze Atmel Studio 6 // można zaobserwować...
Kiedy nawet jak próbuję utworzyć tablce w ten sposób to dzieje się to samo i[syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/pgmspace.h> int main(void) { const int img[3] PROGMEM = { 1, 2 ,3}; while(1) { _delay_ms(10); } } [/syntax] Mogę utworzyć tylko tablicę const char tab[] = {"blabla"} i to działa.
...I już się ucieszyłem, lecz stworzył się kolejny problem!! Ponieważ napisów jest ok 40-50, to po powyższej zmianie zajęty obszar pamięci data(RAM) nie wynosi już 31,3%, lecz 93,4%. I CO Z TYM DALEJ ROBIĆ:cry::?: Chyba się nie zrozumieliśmy :( Dane możesz umieścić w pamięci programu ... prog_char PM_UST_ZEG[] = "Ustaw zegar: ";...
Pisane "z palca" i nie sprawdzane: [syntax=c]unsigned int ledy[100][2]={{1,2},{3,4}... i tak dalej}; //pierwsza liczba w {} to piny portu D, druga liczba to czas opóźnienia, kolejna klamra to kolejna para liczb //100 to ilość par for(unsigned char i = 0; i<100; i++){ PORTD = ledy[i][0]; _delay_ms(ledy[i][1]); }[/syntax] Możesz także umieścić tablicę...
Użyj rozszerzenia gcc dla AVR: __flash [syntax=c] struct record { uint16_t pos; const __flash char *txt; } ; const struct record tab[] = { {940, (const __flash char[]){"txt940"}}, {789, (const __flash char[]){"txt789"}}, {115, (const __flash char[]){"txt115"}} }; [/syntax] PS: oczywiscie sama tablica również może rezydować w pamięci flash: [syntax=c]...
aby kompilator/linker był na tyle niedopracowany, aby stałe z pamięci typu FLASH, przepisywać do pamięci typu RAM w tej samej przestrzeni adresowej. Wszystko zależy od skryptu linkera i jak ktoś bardzo potrzebuje, to nie ma problemu w tym, żeby const były kopiowane do RAMu i tam używane. BTW, z tym progmem prawidłowy zapis wygląda tak: __attribute__...
Witam chciałem wyświetlić pojedynczy znak z tablicy i nie wiem jak to zrobić może pokaże na przykładzie : [syntax=c] char PROGMEM tab1[] = {"FLASH"}; char tab2[]={"AVR ATMEL"}; lcd_str_P(tab1[2]); //znak A lcd_str(tab2[2]); //znak R [/syntax] Wyświetlacz LCD to hd44780 biblioteka do obsługi lcd pochodzi z książki od mirekk36 niestety po skompilowaniu...
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...
Mam tak zadeklarowane funkcje. [syntax=c] void drawFrame1() { print("Ramka 1"); } void drawFrame2() { print("Ramka 2"); } [/syntax] Wiem że w main mogę wywołać tak funkcję [syntax=c] int main(void) { char a; a=1; if(a==0) drawFrame1(); if(a==1) drawFrame2(); .... .... while(1); } [/syntax] Nie jest to ładne, wiem że można zrobić tablicę funkcji i wywołać...
Witam, mam pytanie, ponieważ namieszałem już tak bardzo, że sam nie wiem o co chodzi... (1) Załóżmy, że mam kilka deklaracji funkcji: void f_1(void); ... void f_5(void); (2) Następnie mam deklarację łańcuchów, umieszczonych w pamięci Flash: char f_Command1[] PROGMEM = "01"; ... char f_Command5[] PROGMEM = "05";...
Witam, Mam funkcję, która odczytuje tablicę zadeklarowaną jako: const PROGMEM unsigned char ikonka[32] = {0xFF, 0x03, 0x05, 0x09, 0xF1, 0x11, 0x11, 0x91, 0x91, 0x11, 0x11, 0xF1, 0x09, 0x05, 0x03, 0xFF, 0xFF, 0xC0, 0xA0, 0x90, 0x8F, 0x88, 0x88, 0x89, 0x89, 0x88, 0x88, 0x8F, 0x90, 0xA0, 0xC0, 0xFF}; i zapisuje ją do wyświetlacza. void...
Witam próbuję zapisać i odczytywać tablice z napisami w pamięci FLASH, niestety nie udaje mi się to, wyświetlacz nie wyświetla nic próbowałem po przez PROGMEM jak i przez __flash co kompletnie nie zadziałało nie chciało utworzyć zmiennej. poniżej kod programu. [syntax=c]const char T1[] PROGMEM = {"DS1307"}; const char T2[] PROGMEM = {"TESTER"}; const...
Twoja funkcja wyświetlająca wygląda pewnie jakoś tak: [syntax=c]void drawPicture (const unsigned char * picture[][84]) { unsigned char temp, x=0, y=0; for (unsigned char i = 0; i<6; i++) { for (unsigned char j = 0; j<84; j++) { temp = pgm_read_byte(&(picture[i][j])); for (unsigned char k=0; k<8; k++) { if (temp & (1<<(7-k)) )...
Spoko, tylko to jest na ATmega128. Co do kart pamięci to musiałbyś napisać obsługę sam. Generalnie poczytaj notę katalogową. //inicjalizacja Timera 0 jako generatora PWM void Timer0_PWM_mode() { DDRB |= (1<<4); TCCR0 |= (1<<WGM00) | (1<<WGM01) | (1<<COM01) | (1<<CS00);...
Dziękuje za konkretną i zrozumiałą odpowiedź. Tylko jeśli zrobię to tak : byte const LGc[8] PROGMEM = { B00111, B01111, B11111, B11111, B11111, B11111, B11111, B11111 }; to w jaki sposób to wyświetlić i przenieść ? // Read a byte of character data OneByte = pgm_read_byte(&Seg7_segtbl[i... mało mi to mówi, jakaś...
[syntax=c]char test[5];[/syntax] Bufor do którego odbiornik wpisuje odebranego stringa (przesyłana jest temeperatura bez przecinka) np 234 to tablica znaków mojego wyświetlacza [syntax=c]prog_char cyferki[15] PROGMEM = { 0x3F,//0 0x09,//1 0x6E,//2 0x6D,//3 0x59,//4 0x75,//5 0x77,//6 0x29,//7 0x7F,//8 0x7D,//9 0x00 //nic };[/syntax] Jak bezpośrednio...
Z tym że jak wrzucisz do eepromu to ustaw bity BOD. Dlaczego? Dodano po 4 1. Zmień typ dla danych COLORS i brightness z int na unsigned char. Pętla wtedy będzie dla i < 255; i 10 kolorów wystarczy. Mógłbym prosić o wprowadzenie zmiany w kodzie ? Tablicę COLORS umieść w flash przez PROGMEM. Jak wywali błąd to dołącz odpowiedni plik (poszukaj gdzie...
Czy można umieścić tablicę bajtowych danych w pamięci programu(FLASH) a nie RAMie tak jak to robi kompilator ? ( do elementów tej tablicy odwołują się funkcje ale nic do niej nie zapisują ) W Keilu wystarczylo uzyc slowa CODE przy deklaracji tablicy czy zmiennej, a w GCC mozna?? Pozdrawiam TEMAT NIEAKTUALNY !! WSZYSTKO JEST W MANUALU. Rozdzial: "7.3.15...
moja zabawkowa Yamaha na której eksperymentuję ma nuty od 41 do 72. Czyli tak tylko dla przykładu, nuta 41 to połączenie w układzie o numerze 12, nuta 42 to 18. Jak to najprościej zrobić? Tu się chyba nie obędzie bez przemapowania nuta->klucz. Najlepiej może w postaci stałej tablicy. Na Arduino przy dużych tablicach powstaje problem i trzeba korzystać...
Witam, Panowie dziękuję za cenne uwagi. Mam jednak do nich pytanie: [syntax=c]// Definiuje nowy typ - tym razem dla mniejszej wygody typedef char Int8; // Napisy w pamięci programu static const Int8 PROGMEM Text_A[] = {" blebleble1 "}; static const Int8 PROGMEM Text_B[] = {" blebleble2 "}; static const Int8 PROGMEM Text_C[] = {" blebleble3 "}; static...
No to jest kolejna wersja : 1.0.0.5 teraz w przypadku konieczności generowania fontu binarnego tworzony jest nawet dodatkowy plik źródłowy w którym możemy sobie przetrzymywać nazwy plików na karcie pamięci SD. Dlaczego ? powód jest banalny no i znowu kolejne ułatwienie sobie pracy, bo przecież PetitFat nie może korzystać z LFN (długich nazw plików),...
Witam Stworzyłęm sobie strukturę, a następnie stworzyłem tablicę typu tej struktury. Wykorzystuję to do wyświetlania menu. Tablicę umieściłem w pamięci programu. Problem objawia się w tym, że nie wiem jak przekazać tą tablicę do funkcji. Czy można przypisać jej jakoś wskaźnik i później przekazać wskaźnik do funkcji czy zrobić to za pomocą indeksó tablicy....
Robię sobie tablicę unsigned char tablica To zależy od kompilatora. Dla avr-gcc trzeba dodać do deklaracji PROGMEM i do odczytu używać makr pgm_read_byte/word itp. W przypadku IARa wystarczy _flash.
Dlatego poprzestałem na dzieleniu. Zmienne "CyfraX" (X=1,2) są pointerami do tablicy (progmem) i nowe wartości podawane są już na port procka, do którego (przez oporniki) podłączone są katody wyświetlaczy. Anodami sterują inne piny. Nic wielkiego.
Witam zaimplementowałem (z drobnymi modyfikacjami) u siebie menu z tematu [url=http://www.elektroda.pl/rtvforum/to... w skrócie wyszstkie deklaracje wyglądają tak [syntax=c] typedef struct { unsigned char next_state[4]; //przechodzenie pomiędzy pozycjami menu void (*callback)(unsigned char event);//funkcja callback const unsigned char*...
https://obrazki.elektroda.pl/6497415700_... W temacie o testerze elementów https://obrazki.elektroda.pl/1770461400_... Wybieramy project->properties wybieramy use external makefile i wybieramy plik Makefile z katalogu "mega328_st7565", w katalogu projektu. https://obrazki.elektroda.pl/1105525900_...
Witam, Męczę się z kawałkiem kodu, który wbrew (mojej) logice, działa nie tak jak powinien. Chcę wyświetlić element tablicy stringów z pamięci PGMEM, a w niektórych wypadkach otrzymuję śmieci. 05, Piątek 05, ŔGŔFŔEŔDŔCŔBŔAŔ(at)Ŕ?Ŕ>Ŕ=Ŕ<Ŕ;Ŕ:... 05, ŔGŔFŔEŔDŔCŔBŔAŔ(at)Ŕ?Ŕ>Ŕ=Ŕ<Ŕ;Ŕ:... Zmienne idx i d.WeekDay zawierają tą samą wartość,...
nie mam już siły może ktos zerknąc???? Ten sam objaw nie ładuje nic do tablicy REC_MES #include <avr/io.h> #include <util/delay.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <avr/pgmspace.h> static char sms[] = "0791"; static char smscd[] PROGMEM ="01000B91";...
Witam. Chcę upakować tablicę tekstową ( około 3000 bajtów ) w pamięci programu. Tablica ma taki wygląd. Próbuje ją deklarować tak jak widać w poniższym oknie ale efekt jest mizerny. [syntax=c] const char *trans[][3] PROGMEM = { { "L1 tekst" , "0x00" , "L1-tekst opis" }, { "L2 tekst 2" , "0x80" , "L2-tekst opis" }, ..... { "L90 ostatni tekst" , "0x33"...
Mamy przykładowo plik test.htm. Użycie polecenia _binary_test_bin_start _binary_test_bin_end _binary_test_bin_size (czyli po kolei: adres początku, adres końca i rozmiar danych) dodajemy deklarację[syntax=c]extern const char _binary_test_bin_start[] PROGMEM;[/syntax]i już możemy korzystać z naszych danych. A tutaj przykładowe kawałki makefile http://www.atmel.com/webdoc/AVRLibcRefer...
Witam, Po pierwsze. Chciałbym przenieść całą strukturę do pamięci flash: typedef struct { unsigned char state; unsigned char input; unsigned char nextstate; } MENU_NEXTSTATE; typedef struct { unsigned char state; unsigned char *pText; unsigned char (*pFunc)(unsigned char input); } MENU_STATE; Czy możecie mi wyjaśnić...
const char text nie mozesz inicjalizować tablicy tablcą. Podstawy C/C++ trzeba poznać najpierw. Na AVR-ach poza parametrami funkcji na razie wogóle zapomij o const bo temat jest dość śliski. Nie tylko nie powinien zapomnieć, ale wręcz powinien używać const. I to z kilku powodów, z których najważniejszy jest taki, że zmienne z PROGMEM muszą być const....
Wybierz prescaler większy bądź równy 128 i wartość porównywania na '8000000/prescaler' Kolega chyba zapomniał , że TIMER2 jest tylko 8-bitowy :( Ja natomiast zaproponuje F_CPU/256/250 czyli ,F_CPU=8000000 , preskaler=256,OCR2=249 i co 125 przerwanie , mamy sekundę.Timer 2 w trybie CTC.Cały zegarek , łącznie z tymi 10 porównaniami czasu , można spokojnie...
Przy przewadze stałych składników klasy (struktury) najlogiczniejszym wydaje mi się w takim wypadku utworzenie struktury w pamięci flash tylko z tych stałych składników. Jako obiekt zadeklaruję tablicę o typie tej struktury, a następnie utworzę tablicę dla każdego składnika pierwotnie projektowanej struktury, który miał być niestały. Prawdopodobnie...
Nie rozumiem jeszcze dlaczego ale kompilator czasami podkreśla mi składnię na żółto tego: res = pf_open(strcpy_P( files, plik i podaje komunikat passing argument 2 of 'strcpy_P' discards qualifiers from pointer target type . Dlatego że przez całą książkę piszę, przypominam o tym wszędzie na forach, ale jakoś mało kto słucha, robi po swojemu a potem...
Proszę. // font.h // // Tablica czcionek 5x7 // //#include <avr/pgmspace.h> static const char /*PROGMEM*/ font5x8[] = { 0x00, 0x00, 0x00, 0x00, 0x00,// (spacja) 0x00, 0x00, 0x5F, 0x00, 0x00,// ! 0x00, 0x07, 0x00, 0x07, 0x00,// " 0x14, 0x7F, 0x14, 0x7F, 0x14,// # 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $ 0x23, 0x13, 0x08, 0x64,...
Witam Mam problem z inicjalizacją portu RS232 na Atmedze162, szybkość transmisji 115200. 8, N, 1 oto kod: //Zmienne volatile unsigned char buffers[55]; volatile unsigned char counter=0; const unsigned char frame1[] PROGMEM={0x1E,0X00,0X0C,0X7F,0X00,0... const unsigned char frame11[] PROGMEM={0x1E,0X00,0X0C,0X17,0X00,0...
Witam. Piszę program z obsługą MENU i w tym celu stworzyłem strukturę: Dodano po 2 Wystarczy zamiast: [syntax=c]const menu_item menu[] = {...[/syntax] wpisać: [syntax=c]const menu_item menu[] PROGMEM = {...[/syntax]
Ja też się przesiadłem z AVR-ków na ARM-y od ST i akurat na to nie narzekam. W Atmelkach trzeba było stosować enigmatyczne atrybuty PROGMEM, a teraz po prostu const, co wygląda nieco bardziej elegancko i łatwiej pisać przenośny kod. Najprostszym sposobem żeby stwierdzić gdzie trafiły deklarowane dane jest obserwacja rozmiaru sekcji po kompilacji (czasem...
Dzięki! Działa :) Dodano po 17 Mam jeszcze dodatkowe pytania odnośnie makra PSTR i pochodnych z użyciem __flash. Definicja PSTR to: compound literal qualified by address-space qualifierpamiec_flash . Nie wiem o co chodzi kompilatorowi, przecież wyraźnie zaznaczyłem, że tablica ma się znaleźć we FLASH. 4. Z kolei makro #define PGM_STR1(X) ( (const __flash...
Witam, Potrzebuję zrobić sobie menu do sterownika silnika DC, aby było to menu łatwe do przenoszenia i edytowania między projektami postanowiłem je zrobić na strukturach. Tu pojawia się problem i od 3 dni nie mogę wpaść na to co źle robię. Oto wycinki kodu aby ułatwić zobrazowanie problemu: plik Menu.h [syntax=c] #ifndef MENU_H_ #define MENU_H_ #include...
Witam kolegów. Po długim boju z poprawnym skomunikowaniem klawiatury komputerowej PS/2 z mikrokontroleram stanałem na rzeczy teoretycznie prostej, ale która troche mnie przerosła. Mianowicie chcę przekształcić kod odebranego klawisza na znak i wysłać tenże znak na wyświetlacz LCD. Na początku zdefiniowałem tablicę znaków, co próbowałem robić na dwa...
Witam Od jakiegoś czasu próbuję odczytać łańcuch znaków z pamięci flash. jeżeli chodzi o dane 8 bitowe lub 16 bitowe nie ma problemu wszystko jest ok. Sytuacja komplikuje mi się jeżeli chcę umieścić napisy w pamięci Flash. Żeby bardziej zobrazować o co mi chodzi to przedstawię fragmenty kodu które mi działają a które nie. funkcja która odpowiada za...
Z dodatkowych rzeczy, które mógłbyś poprawić to: - stosowanie wielkich liter dla makr for . Mamy 21 wiek i stosujemy co najmniej "-std=c99", więc nie ma potrzeby deklarowania wszystkich zmiennych na początku funkcji enum i stosować zmienne i argumenty tego typu, np: enum class , który wprowadza zakres widoczności, ale musiałbyś wtedy zmienić język z...
Witam, Chcę połączyć ze sobą dwie atmegi po TWI korzystam ze standardowej biblioteki do obsługi sprzętowego TWi tak jak w datasheetach. Jak podłączę jednego AVR do np Ds1307 to obsługa jest ok w dwie strony. Problem mam gdy połączę Atmega32 (master) z Atmega8 (slave) tzn gdy z Atmegi32 wysyłam coś np literkę 'q' to jest ona wrzucana do buf2 i ma się...
pisze programik w C ( nie jestem programista) dla atmegi88 moj problem to wywolanie odpowiedniego elementu z tablicy ktory jest wyswietlany na ekranie telewizora w postaci cyfry dziesietnej - odpowiadajacej wartosci z przetwornika AC static unsigned char cyfry[10][11][5] PROGMEM = //static unsigned char cyfry[10][11][5]...
Pisałeś w temacie: http://www.elektroda.pl/rtvforum/topic18... I zastosowałem się do tego w taki sposób: Plik: main.h extern unsigned char reset_MCUCSR ; // zapamiętanie flag powodu restartu systemu extern unsigned char DDT_stan ; // flagi stanu urządzenia #define DDT_ON_OFF 0 // bit 0 - włączone / wyłączone extern unsigned char SOUND_stan; //...
(at)ex-or przyjrzyj się dokładnie tej sekcji kodu w pliku UTFTGLUE.h. Sądzę, że dyskusja jest czysto akademicka i jest to oczywiste ;) Ale nie w deklaracji, nieprawdaż? Tutaj użyte zostało to jako nazwa typu tzn. przynajmniej były takie intencje autora. Masz rację, że tego typu definicje typu się nie robi przez #define, a już na pewno nie w C++ ;)...
Witam, dzisiaj miałem czas na zgranie kodu i wyrzucenie z niego tego co nie dotyczy tematu: Dodano po 7 Przepraszam za dziwne znaki w komentarzach ale przerzucałem z Windowsa na Linuxa i nie konwertowałem kodowania. Będę wdzięczny za pomoc. Sławek
[syntax=csharp] enum{ 0, menu1, menu2, menu3, menu4, menu11, menu21, menu31, menu41, ustaw1, ustaw2, ustaw3, ustaw4}; unsigned char menu_stage [13][4] PROGMEM = { // ok esc prev next {0,0,0,0}; {menu11,menu1,menu4,menu2}; //menu1 {menu21,menu2,menu1,menu3}; //menu2 {menu31,menu3,menu2,menu4}; //menu3 {menu41,menu4,menu3,menu1}; /menu4 {ustaw1,menu1,menu11,menu11};...
A teraz pytanie o to kiedy używać PROGMEM "tutaj": const unsigned char data[] TUTAJ= { 0x2E,0x73,0x6E,0x64,0x00,0x00, Bo program ruszył bez tego? Chyba ma to znaczenie przy optymalizacji kodu? Mam nadzieje że używasz PROGMEM, to słówko wywołuje to że twoja tablica zostanie zapisana w pamięci programu czyli we flashu, a nie gdzieś w RAMie....
Wrzucam kod dla Attiny13A: ilość próbek częstotliwość wyjściowa 356 49.3 355 49.4 354 49.65 353 49.8 352 50 Wygenerowane przebiegi na oscyloskopie: https://obrazki.elektroda.pl/4382277800_... na skraju cykli https://obrazki.elektroda.pl/4450814000_... Zbliżenie sygnałów 50Hz (brak kolizji, czyli obu sygnałów w stanie...
Tu masz tablicę Dodano po 23 Świetnie... To jak, pomożesz mi czy chciałeś się tylko pochwalić wiedzą? Podałem informacje inżynierskie, to najważniejsze :) Dodano po 2 BTW Ty też skąpisz. NIC nie mówisz o przeznaczeniu projektu. Jeśli ma tylko piszczeć, dlaczego nie coś analogowego? Są liczne projekty, gotowe chipy itd...
To jest 20x4 znaki bo nie upewniłem się? Jakies problemy z nim miałem, poniżej działający kod (biblioteki IIC nie załaczyłem) [syntax=c] LcdDOGM204Init(); //LcdDOGM204Charset( 1 ); LcdDOGM204Kontrast( 35 ); //LcdDOGM204view( 1 ); // Negatyw/pozytyw //======================================... void LcdDOGM204Init() { WriteLcdIIC(...
tablica progmem progmem tablica chara tablica
miracast philips parametr maszynowy wtrysk mercedes
żarówka szeregowo początkujący elektronicy
Zmiana prędkości transmisji w kamerze Hikvision DS-2AE5154-A Gdzie znaleźć schemat ideowy TEAC LP-P1000?