?111lisu pisze:Nie chodzi mi o te 7 znaków tylko o co Ci chodziło?
Termometr 4 punktowy *z podłączeniem do PC*
https://nowyekran24.com/ prawda 24h, POLSKIE forum poza zasięgiem "głównego ścieku", taki informacyjny "DETOX"!
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Pewnie chodziło o to, o co chodziło laurentp, że w kodzie jest taki dynks.
Pewnie robi termometr pokojowy
Kod: Zaznacz cały
#if defined(DEV_BOARD_NANO)
const uint8_t temperature_labels_eeprom[4][8] EEMEM = { "zewn. ",
"wewn. ",
"Tkuchni",
"-------" }
robi, prototypwoxy pisze:....Pewnie robi termometr pokojowy
i nawet mam wykres z tego GD + Perl.
https://nowyekran24.com/ prawda 24h, POLSKIE forum poza zasięgiem "głównego ścieku", taki informacyjny "DETOX"!
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
No różni się tylko napisami... I tym, że zapisuje dane do bazy PostgreSQL, ale to już robi skrypt perlowy na laptopie.
[ Dodano: 2017-02-26, 13:44 ]
Wyszły "w praniu" 2 bugi.
Źle wyświetla się %PWM na porcie szeregowym dla 100% i nie załącza się alarm "zagrzania kolumny", prawdopodobnie związane z przejściem na odczyty filtrowane.
Po poprawieniu będzie nowa wersja archiwum.
[ Dodano: 2017-02-26, 13:44 ]
Wyszły "w praniu" 2 bugi.
Źle wyświetla się %PWM na porcie szeregowym dla 100% i nie załącza się alarm "zagrzania kolumny", prawdopodobnie związane z przejściem na odczyty filtrowane.
Po poprawieniu będzie nowa wersja archiwum.
https://nowyekran24.com/ prawda 24h, POLSKIE forum poza zasięgiem "głównego ścieku", taki informacyjny "DETOX"!
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Poprawione.
Tj poprawione na pewno wyświetlanie na porcie szeregowym, co do detekcji "zagrzania kolumny" to zmieniłem warunek trochę, było "różnica temp. kolumny > 5.00*C @ 10sek, przy Tk > 50 i < 70", jest teraz 3.00*C.
Sprawdzę przy następnym przebiegu.
Czekamy na opis jak "to użyć (zaprogramować) pod Win$" by Nemo82.
Bo pod Linux to : "make flash" ;P
Tj poprawione na pewno wyświetlanie na porcie szeregowym, co do detekcji "zagrzania kolumny" to zmieniłem warunek trochę, było "różnica temp. kolumny > 5.00*C @ 10sek, przy Tk > 50 i < 70", jest teraz 3.00*C.
Sprawdzę przy następnym przebiegu.
Czekamy na opis jak "to użyć (zaprogramować) pod Win$" by Nemo82.
Bo pod Linux to : "make flash" ;P
- Załączniki
-
- archiwum_2017-02-27_AVR.zip
- Źródła i skompilowane na płytkę produkcyjną.
- (74.63 KiB) Pobrany 311 razy
https://nowyekran24.com/ prawda 24h, POLSKIE forum poza zasięgiem "głównego ścieku", taki informacyjny "DETOX"!
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Przykładowe wgrywanie wsadu do Atmega328P na WIN7 64bit
3c). Przykładowe wgrywanie gotowego wsadu do mikrokontrolera Atmega328P-PU na komputerze z Windows7 - 64bit.
I. Do wgrania wsadu do Atmega328P-PU potrzebne nam będzie:
1. Programator np: USBASP v2.0 (ja w tym przykładzie będę się takim posługiwał; wystąpiły przypadki, że programator był uszkodzony – jest to chińska masowa produkcja, ja swój kupiłem w sklepie na miejscu i mój działa bez problemu).
UWAGA: Są także lepsze programatory z gotowymi podstawkami, które znacznie ułatwiają programowanie np.ISP Adapter - podstawka ZIF .Nie trzeba kombinować z płytką stykową, kabelkami itd. mają one także możliwość programowania większej ilości mikrokontrolerów ale są one droższe niż zestaw od metody, którą prezentuje.
2. Prototypowa płytka stykowa (można również wykorzystać podstawkę DIL28 i do niej dolutować wszystkie kabelki i elementy)
3. Osiem kabelków do płytki stykowej z końcówkami męskimi (można użyć przewodów od kabla sieciowego UTP/STP tzw. skrętki)
4. Kwarc 16 Mhz
5. Dwa kondensatory 22pF i jeden 100nF
6. Program WinAVR
7. Program Zadig(ver.2.2) do instalacji sterowników dla programatora USBASP.
8. Pliki z wsadem z wątku Super Termometr. W drugim poście jest zawsze najnowsza wersja do pobrania.
Do wgrania wsadu możemy także użyć programu Burn-O-Mat v.2
9. Program Burn_o_Mat v2 (nakładka na avrdude, link od kolegi krzyski)
II. Instalujemy program WINAVR w głównym katalogu na dysku C, wybieramy nazwę katalogu do instalacji na WINAVR.
Pobrane archiwum z wątku o termometrze rozpakowujemy a następnie wybieramy 2 pliki: main_atmega328p.hex(bin) oraz main_atmega328p_eeprom.hex(bin) i kopiujemy je do katalogu C:\WinAVR\bin
III. Podłączamy programator USBASP do komputera (wyłączamy automatyczne wgrywanie sterowników z witryny Windows Update), uruchamiamy program Zadig, w menu Options wybieramy opcję List All Devices, wybieramy nasz programator z listy urządzeń USB i instalujemy sterowniki do programatora wybierając libusbK (v3.0.7.0). Odłączamy programator od komputera.
IV. Wkładamy chip Amtega328P do płytki stykowej. Następnie wkładamy kwarc 16 MHz także po lewej stronie przy nóżkach 9 i 10. Kolejno dokładamy dwa kondensatory 22pF: w pola 8 i 9 oraz 8 i 10 następnie kondensator 100 uF w pola 7 i 8.
Teraz podłączamy wtyk z taśmy programatora kabelkami do płytki stykowej:
Wtyk - kolor kabelka - Nr nóżki (tak jest u mnie na zdjęciach, kolejność podłączania dowolna ).
VCC - czerwony - Nóżka 7
GND - czarny - Nóżka 8
RESET - pomarańczowy - Nóżka 1
MOSI - żółty - Nóżka 17
MISO - biały - Nóżka 18
SCK - niebieski - Nóżka 19
Następnie łączymy 7 VCC - zielony - 20 AVCC
oraz pole 8 GND - żółty - 22 GND
Korzystając ze schematu powinno to być prostsze niż mój opis słowny .
V. Do wgranie wsadu możemy użyć konsoli Windows i wpisać komendy dla avrdude, które podałem poniżej lub skorzystać z nakładki Burn-O-Mat v2 (program do działania wymaga środowiska Java).
Va).Uruchamiamy konsole systemu Windows (w pole "Wyszukaj pliki i programy" wpisujemy: CMD i uruchamiamy).
Przechodzimy do głównego katalogu na dysku C dwukrotnym poleceniem "cd.." a następnie przechodzimy do katalogu WINAVR/bin: "cd WINAVR" , "cd bin".
Podłączamy taśmę do programatora i podłączamy go do komputera. Dla sprawdzenie czy wszystko jest ok wpisujemy komendę:
Jeśli wszystko zrobiliśmy poprawnie to możemy przystąpić do zaprogramowania mikrokontrolera.
Jeśli mamy 'nowy' mikrokontroler najpierw ustawiamy 'fuses' komendą:
Następnie wgrywamy plik main:
Jako ostatni wgrywamy plik eeprom:
Vb). Instalujemy AVR8 Burn-O-Mat v2 na komputerze. Uruchamiamy program i przechodzimy do Settings --> AVRDUDE. Tutaj ustawiamy katalogi do programu i pliku konfiguracyjnego avrdude (C:\WinAVR\bin), wybieramy nasz programator z listy rozwijalnej (usbasp) i ustawiamy port, na którym pracuje programator (usb).
Przy nowym mikrokontrolerze klikamy na fuses, ustwiamy kolejno wartości: efuse – FF ; hfuse – D9 ; Lfuse – FF . Następnie: Apply i Write. Wgrywanie pliku main i eeprom to wybranie lokalizaji, gdzie mamy pliki i kliknięcie na Write ( pirerwszy raz najpierw plik main potem eeprom, przy wgrywaniu nowej wersji patrz uwagi poniżej).
UWAGA:
1. Fuses wgrywamy tylko raz.
2. Plik eeprom wgrywamy tylko za pierwszy razem,chyba ze w poście jest wyraźnie napisane, że są zmiany w pamięci eeprom.
3. Jeśli wgrywamy nową wersję to wystarczy tylko plik main_atmega328p.hex(bin)
Po wgraniu odłączamy programator od komputera, wyciągamy mikrokontroler z płytki stykowej, wkładamy do termometru i do dzieła.
Pozdrawiam
Marcin
I. Do wgrania wsadu do Atmega328P-PU potrzebne nam będzie:
1. Programator np: USBASP v2.0 (ja w tym przykładzie będę się takim posługiwał; wystąpiły przypadki, że programator był uszkodzony – jest to chińska masowa produkcja, ja swój kupiłem w sklepie na miejscu i mój działa bez problemu).
UWAGA: Są także lepsze programatory z gotowymi podstawkami, które znacznie ułatwiają programowanie np.ISP Adapter - podstawka ZIF .Nie trzeba kombinować z płytką stykową, kabelkami itd. mają one także możliwość programowania większej ilości mikrokontrolerów ale są one droższe niż zestaw od metody, którą prezentuje.
2. Prototypowa płytka stykowa (można również wykorzystać podstawkę DIL28 i do niej dolutować wszystkie kabelki i elementy)
3. Osiem kabelków do płytki stykowej z końcówkami męskimi (można użyć przewodów od kabla sieciowego UTP/STP tzw. skrętki)
4. Kwarc 16 Mhz
5. Dwa kondensatory 22pF i jeden 100nF
6. Program WinAVR
7. Program Zadig(ver.2.2) do instalacji sterowników dla programatora USBASP.
8. Pliki z wsadem z wątku Super Termometr. W drugim poście jest zawsze najnowsza wersja do pobrania.
Do wgrania wsadu możemy także użyć programu Burn-O-Mat v.2
9. Program Burn_o_Mat v2 (nakładka na avrdude, link od kolegi krzyski)
II. Instalujemy program WINAVR w głównym katalogu na dysku C, wybieramy nazwę katalogu do instalacji na WINAVR.
Pobrane archiwum z wątku o termometrze rozpakowujemy a następnie wybieramy 2 pliki: main_atmega328p.hex(bin) oraz main_atmega328p_eeprom.hex(bin) i kopiujemy je do katalogu C:\WinAVR\bin
III. Podłączamy programator USBASP do komputera (wyłączamy automatyczne wgrywanie sterowników z witryny Windows Update), uruchamiamy program Zadig, w menu Options wybieramy opcję List All Devices, wybieramy nasz programator z listy urządzeń USB i instalujemy sterowniki do programatora wybierając libusbK (v3.0.7.0). Odłączamy programator od komputera.
IV. Wkładamy chip Amtega328P do płytki stykowej. Następnie wkładamy kwarc 16 MHz także po lewej stronie przy nóżkach 9 i 10. Kolejno dokładamy dwa kondensatory 22pF: w pola 8 i 9 oraz 8 i 10 następnie kondensator 100 uF w pola 7 i 8.
Teraz podłączamy wtyk z taśmy programatora kabelkami do płytki stykowej:
Wtyk - kolor kabelka - Nr nóżki (tak jest u mnie na zdjęciach, kolejność podłączania dowolna ).
VCC - czerwony - Nóżka 7
GND - czarny - Nóżka 8
RESET - pomarańczowy - Nóżka 1
MOSI - żółty - Nóżka 17
MISO - biały - Nóżka 18
SCK - niebieski - Nóżka 19
Następnie łączymy 7 VCC - zielony - 20 AVCC
oraz pole 8 GND - żółty - 22 GND
Korzystając ze schematu powinno to być prostsze niż mój opis słowny .
V. Do wgranie wsadu możemy użyć konsoli Windows i wpisać komendy dla avrdude, które podałem poniżej lub skorzystać z nakładki Burn-O-Mat v2 (program do działania wymaga środowiska Java).
Va).Uruchamiamy konsole systemu Windows (w pole "Wyszukaj pliki i programy" wpisujemy: CMD i uruchamiamy).
Przechodzimy do głównego katalogu na dysku C dwukrotnym poleceniem "cd.." a następnie przechodzimy do katalogu WINAVR/bin: "cd WINAVR" , "cd bin".
Podłączamy taśmę do programatora i podłączamy go do komputera. Dla sprawdzenie czy wszystko jest ok wpisujemy komendę:
Kod: Zaznacz cały
avrdude -p m328p -c usbasp -n
Jeśli wszystko zrobiliśmy poprawnie to możemy przystąpić do zaprogramowania mikrokontrolera.
Jeśli mamy 'nowy' mikrokontroler najpierw ustawiamy 'fuses' komendą:
Kod: Zaznacz cały
avrdude -p m328p -c usbasp -U hfuse:w:0xD1:m -Ulfuse:w:0xFF:m -U efuse:w:0x07:m
Kod: Zaznacz cały
avrdude -p m328p -c usbasp -P usb -U flash:w:main_atmega328p.hex
Jako ostatni wgrywamy plik eeprom:
Kod: Zaznacz cały
avrdude -p m328p -c usbasp -P usb - U eeprom:w:main_atmega328p_eeprom.hex
Vb). Instalujemy AVR8 Burn-O-Mat v2 na komputerze. Uruchamiamy program i przechodzimy do Settings --> AVRDUDE. Tutaj ustawiamy katalogi do programu i pliku konfiguracyjnego avrdude (C:\WinAVR\bin), wybieramy nasz programator z listy rozwijalnej (usbasp) i ustawiamy port, na którym pracuje programator (usb).
Przy nowym mikrokontrolerze klikamy na fuses, ustwiamy kolejno wartości: efuse – FF ; hfuse – D9 ; Lfuse – FF . Następnie: Apply i Write. Wgrywanie pliku main i eeprom to wybranie lokalizaji, gdzie mamy pliki i kliknięcie na Write ( pirerwszy raz najpierw plik main potem eeprom, przy wgrywaniu nowej wersji patrz uwagi poniżej).
UWAGA:
1. Fuses wgrywamy tylko raz.
2. Plik eeprom wgrywamy tylko za pierwszy razem,chyba ze w poście jest wyraźnie napisane, że są zmiany w pamięci eeprom.
3. Jeśli wgrywamy nową wersję to wystarczy tylko plik main_atmega328p.hex(bin)
Po wgraniu odłączamy programator od komputera, wyciągamy mikrokontroler z płytki stykowej, wkładamy do termometru i do dzieła.
Pozdrawiam
Marcin
Ostatnio zmieniony 2017-03-01, 07:48 przez nemo82, łącznie zmieniany 1 raz.
laurentp u Ciebie też wali błędami, czy mi czegoś brakuje?
Wprawdzie hex powstaje i jakoś to bryka.
Wprawdzie hex powstaje i jakoś to bryka.
Kod: Zaznacz cały
mariusz@mariusz-laptop:~/Arduino/Projekty/Termometr-z-forum-2017-03/archiwum_2017-02-27_AVR$ make clean
rm -rf *.o main_atmega328p.elf *.eps *.png *.pdf *.bak
rm -rf *.lst *.map *.hex *.bin *.srec
mariusz@mariusz-laptop:~/Arduino/Projekty/Termometr-z-forum-2017-03/archiwum_2017-02-27_AVR$ make
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o crc8.o crc8.c
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o ioinit.o ioinit.c
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o lcd.o lcd.c
lcd.c: In function ‘lcd_def_cgram_char’:
lcd.c:500:13: warning: variable ‘pos’ set but not used [-Wunused-but-set-variable]
uint8_t pos;
^
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o onewire.o onewire.c
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o ones_count.o ones_count.c
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o keyboard_filter.o keyboard_filter.c
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o timer_int.o timer_int.c
timer_int.c:385:1: warning: "/*" within comment [-Wcomment]
/* ------------------------------------------ */
^
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o uart_int.o uart_int.c
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o virtual_lcd.o virtual_lcd.c
virtual_lcd.c: In function ‘LCD_virt_display’:
virtual_lcd.c:19:15: warning: passing argument 1 of ‘lcd_puts’ from incompatible pointer type
lcd_puts(&lcd_line1);
^
In file included from virtual_lcd.c:6:0:
virtual_lcd.h:28:17: note: expected ‘const char *’ but argument is of type ‘char (*)[17]’
extern void lcd_puts(const char *s);
^
virtual_lcd.c:51:16: warning: pointer targets in passing argument 1 of ‘lcd_puts’ differ in signedness [-Wpointer-sign]
lcd_puts(&virt_lcd_line2[16 * (i - 1)]);
^
In file included from virtual_lcd.c:6:0:
virtual_lcd.h:28:17: note: expected ‘const char *’ but argument is of type ‘uint8_t *’
extern void lcd_puts(const char *s);
^
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o DS18X20.o DS18X20.c
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o do_config.o do_config.c
do_config.c: In function ‘do_config’:
do_config.c:78:26: warning: passing argument 1 of ‘eeprom_write_byte’ discards ‘const’ qualifier from pointer target type
eeprom_write_byte(&sensor_addreses_eeprom[z][i], scratchpad_table[z][i]);
^
In file included from do_config.c:6:0:
/usr/lib/avr/include/avr/eeprom.h:164:6: note: expected ‘uint8_t *’ but argument is of type ‘const uint8_t *’
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
^
do_config.c:93:31: warning: passing argument 1 of ‘eeprom_write_byte’ discards ‘const’ qualifier from pointer target type
eeprom_write_byte(&sensor_addreses_eeprom[i][j], 0xFF);
^
In file included from do_config.c:6:0:
/usr/lib/avr/include/avr/eeprom.h:164:6: note: expected ‘uint8_t *’ but argument is of type ‘const uint8_t *’
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
^
do_config.c:96:30: warning: passing argument 1 of ‘eeprom_write_byte’ discards ‘const’ qualifier from pointer target type
eeprom_write_byte(&num_of_sensors_eeprom, 0);
^
In file included from do_config.c:6:0:
/usr/lib/avr/include/avr/eeprom.h:164:6: note: expected ‘uint8_t *’ but argument is of type ‘const uint8_t *’
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
^
do_config.c:97:30: warning: passing argument 1 of ‘eeprom_write_byte’ discards ‘const’ qualifier from pointer target type
eeprom_write_byte(&lcd_flags_in_eeprom, LCD_DEFAULT_FLAGS);
^
In file included from do_config.c:6:0:
/usr/lib/avr/include/avr/eeprom.h:164:6: note: expected ‘uint8_t *’ but argument is of type ‘const uint8_t *’
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
^
do_config.c:104:67: warning: passing argument 1 of ‘eeprom_write_byte’ discards ‘const’ qualifier from pointer target type
if ((flagi & CONFIG_CLEARED_FLAG) == 0) { eeprom_write_byte(&num_of_sensors_eeprom, (z + 1)); }
^
In file included from do_config.c:6:0:
/usr/lib/avr/include/avr/eeprom.h:164:6: note: expected ‘uint8_t *’ but argument is of type ‘const uint8_t *’
void eeprom_write_byte (uint8_t *__p, uint8_t __value);
^
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o do_1s_stuff.o do_1s_stuff.c
do_1s_stuff.c: In function ‘do_1s_stuff’:
do_1s_stuff.c:18:6: warning: implicit declaration of function ‘memcpy’ [-Wimplicit-function-declaration]
memcpy(&buffer_tx[0], &lcd_time[0], 9);
^
do_1s_stuff.c:18:6: warning: incompatible implicit declaration of built-in function ‘memcpy’
do_1s_stuff.c:18:13: warning: passing argument 1 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[0], &lcd_time[0], 9);
^
do_1s_stuff.c:18:13: note: expected ‘void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:18:28: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[0], &lcd_time[0], 9);
^
do_1s_stuff.c:18:28: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:110:14: warning: passing argument 1 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[(j * 17) + 10],&temperature_labels[j][0], 7);
^
do_1s_stuff.c:110:14: note: expected ‘void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:164:34: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&lcd_line1[0], &buffer_tx[(17 * j) + 9], 16);
^
do_1s_stuff.c:164:34: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:260:39: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&virt_lcd_line2[0], &buffer_tx[26], 16);
^
do_1s_stuff.c:260:39: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:322:38: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&virt_lcd_line2[41], &buffer_tx[69], 7);
^
do_1s_stuff.c:322:38: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:352:17: warning: passing argument 1 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[77], "Alarm:-----", 11);
^
do_1s_stuff.c:352:17: note: expected ‘void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:360:17: warning: passing argument 1 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[89], "PWM: ", 7);
^
do_1s_stuff.c:360:17: note: expected ‘void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:411:16: warning: passing argument 1 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[(j * 17) + 10],&temperature_labels[j][0], 7);
^
do_1s_stuff.c:411:16: note: expected ‘void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:429:32: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&lcd_line1[0], &buffer_tx[9], 16);
^
do_1s_stuff.c:429:32: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:437:50: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&virt_lcd_line2[(16 * (j - 1))], &buffer_tx[9 + (17 * j)], 16);
^
do_1s_stuff.c:437:50: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:458:38: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&virt_lcd_line2[32], &buffer_tx[60], 16);
^
do_1s_stuff.c:458:38: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:460:17: warning: passing argument 1 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[77], "Alarm:-----", 11);
^
do_1s_stuff.c:460:17: note: expected ‘void *’ but argument is of type ‘volatile uint8_t *’
do_1s_stuff.c:468:17: warning: passing argument 1 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&buffer_tx[89], "PWM: %", 8);
^
do_1s_stuff.c:468:17: note: expected ‘void *’ but argument is of type ‘volatile uint8_t *’
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -c -o main.o main.c
In file included from main.c:197:0:
main.h:129:1: warning: missing braces around initializer [-Wmissing-braces]
uint8_t sensor_addreses[4][8] = { 0x28,0xAD,0x94,0xCC,0x00,0x00,0x00,0x8B,
^
main.h:129:1: warning: (near initialization for ‘sensor_addreses[0]’) [-Wmissing-braces]
main.h:226:5: warning: missing braces around initializer [-Wmissing-braces]
const uint16_t tabela_akasa[18][2] PROGMEM = { 10000, 000,
^
main.h:226:5: warning: (near initialization for ‘tabela_akasa[0]’) [-Wmissing-braces]
main.h:245:5: warning: missing braces around initializer [-Wmissing-braces]
const uint8_t time_table[TIME_TABLE_MAX][3] PROGMEM = { 0, 0, 15,
^
main.h:245:5: warning: (near initialization for ‘time_table[0]’) [-Wmissing-braces]
main.h:351:5: warning: missing braces around initializer [-Wmissing-braces]
const uint8_t sensor_addreses_eeprom[4][8] EEMEM = { 0x28,0xAD,0x94,0xCC,0x00,0x00,0x00,0x8B,
^
main.h:351:5: warning: (near initialization for ‘sensor_addreses_eeprom[0]’) [-Wmissing-braces]
main.c: In function ‘display_3rd_lcd_line’:
main.c:372:33: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&virt_lcd_line2[24], &lcd_time[0], 8);
^
In file included from main.c:169:0:
/usr/lib/avr/include/string.h:117:14: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
extern void *memcpy(void *, const void *, size_t);
^
main.c:385:33: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&virt_lcd_line2[25], &lcd_time[0], 7);
^
In file included from main.c:169:0:
/usr/lib/avr/include/string.h:117:14: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
extern void *memcpy(void *, const void *, size_t);
^
main.c:391:33: warning: passing argument 2 of ‘memcpy’ discards ‘volatile’ qualifier from pointer target type
memcpy(&virt_lcd_line2[25], &buffer_tx[52], 7);
^
In file included from main.c:169:0:
/usr/lib/avr/include/string.h:117:14: note: expected ‘const void *’ but argument is of type ‘volatile uint8_t *’
extern void *memcpy(void *, const void *, size_t);
^
avr-gcc -g -Wall -Os -std=gnu99 -mmcu=atmega328p -Wl,-Map,main.map -o main_atmega328p.elf crc8.o ioinit.o lcd.o onewire.o ones_count.o keyboard_filter.o timer_int.o uart_int.o virtual_lcd.o DS18X20.o do_config.o do_1s_stuff.o main.o
avr-objdump -h -S main_atmega328p.elf > main_atmega328p.lst
avr-objcopy -j .text -j .data -O ihex main_atmega328p.elf main_atmega328p.hex
avr-objcopy -j .text -j .data -O binary main_atmega328p.elf main_atmega328p.bin
avr-objcopy -j .text -j .data -O srec main_atmega328p.elf main_atmega328p.srec
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex main_atmega328p.elf main_atmega328p_eeprom.hex \
|| { echo empty main_atmega328p_eeprom.hex not generated; exit 0; }
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O binary main_atmega328p.elf main_atmega328p_eeprom.bin \
|| { echo empty main_atmega328p_eeprom.bin not generated; exit 0; }
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O srec main_atmega328p.elf main_atmega328p_eeprom.srec \
|| { echo empty main_atmega328p_eeprom.srec not generated; exit 0; }
mariusz@mariusz-laptop:~/Arduino/Projekty/Termometr-z-forum-2017-03/archiwum_2017-02-27_AVR$ ./Wgraj_main
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "./main_atmega328p.hex"
avrdude: input file ./main_atmega328p.hex auto detected as Intel Hex
avrdude: writing flash (11904 bytes):
Writing | ################################################## | 100% 3.63s
avrdude: 11904 bytes of flash written
avrdude: verifying flash memory against ./main_atmega328p.hex:
avrdude: load data flash data from input file ./main_atmega328p.hex:
avrdude: input file ./main_atmega328p.hex auto detected as Intel Hex
avrdude: input file ./main_atmega328p.hex contains 11904 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 2.80s
avrdude: verifying ...
avrdude: 11904 bytes of flash verified
avrdude: reading input file "./main_atmega328p_eeprom.hex"
avrdude: input file ./main_atmega328p_eeprom.hex auto detected as Intel Hex
avrdude: writing eeprom (66 bytes):
Writing | ################################################## | 100% 0.33s
avrdude: 66 bytes of eeprom written
avrdude: verifying eeprom memory against ./main_atmega328p_eeprom.hex:
avrdude: load data eeprom data from input file ./main_atmega328p_eeprom.hex:
avrdude: input file ./main_atmega328p_eeprom.hex auto detected as Intel Hex
avrdude: input file ./main_atmega328p_eeprom.hex contains 66 bytes
avrdude: reading on-chip eeprom data:
Reading | ################################################## | 100% 0.16s
avrdude: verifying ...
avrdude: 66 bytes of eeprom verified
avrdude: safemode: Fuses OK (H:00, E:00, L:00)
avrdude done. Thank you.
mariusz@mariusz-laptop:~/Arduino/Projekty/Termometr-z-forum-2017-03/archiwum_2017-02-27_AVR$
Lisu
Wali, to są warningi, nie errory, przy error by nie dokończył kompilacji.111lisu pisze:laurentp u Ciebie też wali błędami, czy mi czegoś brakuje?...
To "jakieś typecasty w C", część jest z volatile vs bez volatile.
Ale ogólnie działa jak trzeba.
A nie jestem na tyle mocny w C, żeby to poprawiać.
Jak się wywala, ja robię "make 2> /tmp/xxx; grep err /tmp/xxx"
I tak wyłapuję realne błędy.
https://nowyekran24.com/ prawda 24h, POLSKIE forum poza zasięgiem "głównego ścieku", taki informacyjny "DETOX"!
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
A to spoko bo myślałem, że coś mi brakuje.
Pociesze Cię ja nie jestem tak mocny w C jak Ty, dlatego jak coś dłubie to w C++
ale jak ostatnio zobaczyłem co to wciska w scalaka to masakra. Dziwne, że to działa.
No teraz bardziej mi się podoba
Trochę coś staram się nabazgrać w Andku powiem fajna rzecz tylko jest tego - masakra.
Pościągałem jakieś książki, ale to pasuje mi najbardziej:
http://andrzejklusiewicz-android.blogsp ... -java.html
Może komuś się przyda
No moja "rura" prawie gotowa
Pociesze Cię ja nie jestem tak mocny w C jak Ty, dlatego jak coś dłubie to w C++
ale jak ostatnio zobaczyłem co to wciska w scalaka to masakra. Dziwne, że to działa.
No teraz bardziej mi się podoba
Kod: Zaznacz cały
#if defined(DEV_BOARD_NANO)
<------>const uint8_t<->temperature_labels_eeprom[4][8] EEMEM = { "Kolumny",
<------><------><------><------><------><------><------><------> "Glowicy",
<------><------><------><------><------><------><------><------> "T. Wody",
<------><------><------><------><------><------><------><------> "T. KEGa" };
Trochę coś staram się nabazgrać w Andku powiem fajna rzecz tylko jest tego - masakra.
Pościągałem jakieś książki, ale to pasuje mi najbardziej:
http://andrzejklusiewicz-android.blogsp ... -java.html
Może komuś się przyda
Kod: Zaznacz cały
#!/bin/bash
#######
##Boot##
#######
#/mnt/Magazyn/projekty/arduino-1.7.9-linux64/hardware/tools/avr/bin/avrdude -P #/dev/ttyACM3 -b 115200 \
#-C "/mnt/Magazyn/projekty/arduino-1.7.9-linux64/hardware/tools/avr/etc/avrdude.conf" \
#-c avrisp -p m328p -v -e -U flash:w:/home/mariusz/Arduino/Projekty/bootloader_Arduino_Nano/ATmegaBOOT_168_atmega328.hex \
#-U lock:w:0x0F:m
##########
## Program##
##########
/mnt/Magazyn/projekty/arduino-1.7.9-linux64/hardware/tools/avr/bin/avrdude -p atmega328p \
-c arduino -C "/mnt/Magazyn/projekty/arduino-1.7.9-linux64/hardware/tools/avr/etc/avrdude.conf" \
-P /dev/ttyUSB0 -b 57600 -U flash:w:"./main_atmega328p.hex":a \
-U eeprom:w:"./main_atmega328p_eeprom.hex":a
#########
# Instrukcja#
#########
echo "Wciskasz lewy przycisk pod LCD włączając termometr."
echo "Podłączasz czujniki po 1 na raz. Jak się pojawia OK wciskasz przycisk."
echo "Przechodzi do następnego, na koniec się restartuje."
Ostatnio zmieniony 2017-03-05, 21:01 przez 111lisu, łącznie zmieniany 2 razy.
Lisu
No C++ jest fajne... dla programisty.111lisu pisze:...dlatego jak coś dłubie to w C++
ale jak ostatnio zobaczyłem co to wciska w scalaka to masakra. Dziwne, że to działa....
Gorzej dla procka z małą ilością flash / RAM, tutaj to masakra.
C się sprawdza i ma dużą bazę bibliotek. No i forum avrfreaks
"goły" C to prawie jak assembler (kontrola sprzętu), tylko fajny no i biblioteki...
Jak się ma choćby na ESP8266 4MB flasha / 256kB RAM to co innego, no i Linux, GB RAM... i GHz procesora.
https://nowyekran24.com/ prawda 24h, POLSKIE forum poza zasięgiem "głównego ścieku", taki informacyjny "DETOX"!
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
MC też koloruje111lisu pisze:...Używasz do tego jakiegoś środowiska typu Eclipse czy jedziesz w vi?
vi to jednak siermiężne...
a Eclipse armata na muchę...
Co daje *podłączenie do PC*? Choćby takie wykresy (ja mam zrobione "na żywo") jak załączam.
- Załączniki
-
- Od zagrzania do końca odbioru przedgonów. Ładnie widać wzrost Tgłowicy jak ubywa przedgonów. Oraz zmianę temperatur przy redukcji mocy (z ~3.2kW) do odbioru przedgonu (1.5kW). Coś mam z wypełnieniem i nie dochodzi do zalania, kolumna od razu się stabilizu
- temperatury_dzis_kolumna_zoom_cgi_1.pl.png (5.76 KiB) Przejrzano 938 razy
-
- Widać ładnie działanie automatu odbioru serca. Tam gdzie jest przerwa w PWM ale nie spadek to moja ręczna korekcja, bo kolumna się destabilizowała zbyt szybko.
- temperatury_dzis_kolumna_zoom_cgi_2.pl.png (7.7 KiB) Przejrzano 884 razy
Ostatnio zmieniony 2017-03-06, 01:20 przez laurentp, łącznie zmieniany 1 raz.
https://nowyekran24.com/ prawda 24h, POLSKIE forum poza zasięgiem "głównego ścieku", taki informacyjny "DETOX"!
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Nienawidzę.mechaniki.Za to przemiany fazowe zaczynają mnie fascynować
Eeeeee, nooooo...
Powiem Ci, że mcedit , który bardzo lubię nie ma startu do vim'a
Np: nie ma opcji u jak coś zmaścisz w mcedit
/etc/vim/vimrc:
syntax on
set background=dark
o set list nie wspomnę.
najważniejsze to:
i, a, x, p, u , ZZ
Powiedz mi czy temperatura wody (chłodziwo) jest gdzieś użyta
do obliczeń czy tylko jest wyświetlana na wyświetlaczu?
Powiem Ci, że mcedit , który bardzo lubię nie ma startu do vim'a
Np: nie ma opcji u jak coś zmaścisz w mcedit
/etc/vim/vimrc:
syntax on
set background=dark
o set list nie wspomnę.
najważniejsze to:
i, a, x, p, u , ZZ
Powiedz mi czy temperatura wody (chłodziwo) jest gdzieś użyta
do obliczeń czy tylko jest wyświetlana na wyświetlaczu?
Lisu
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 26 gości