Aruino v-meter

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Aruino v-meter

Príspevok od používateľa jankrizan » 06 Apr 2024, 11:12

Dobrý deň. Zdravím všetkých arduino nadšencov. Mám k vám prosbu. Na nete som našiel tento projekt, ktorý sa náramne hodí do môjho návrhu konštrukcie.
[code]

void setup(){
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);


Serial.begin(9600);

}

void loop(){
int sensorValue = analogRead(A0);
Serial.print("Decimal=");
Serial.print(sensorValue);
Serial.print("\tBinary=");
Serial.println(sensorValue,BIN);

if(sensorValue>=0&&sensorValue<=1023){


digitalWrite(13,(sensorValue&4));
digitalWrite(12,(sensorValue&8));
digitalWrite(11,(sensorValue&16));
digitalWrite(10,(sensorValue&32));
digitalWrite(9,(sensorValue&64));
digitalWrite(8,(sensorValue&128));
digitalWrite(7,(sensorValue&256 )==256);
digitalWrite(6,(sensorValue&512 )==512);
}
delay(50);
}[/code]

Jedná sa vlastne o voltmeter s binárnym 10 bitovým výstupom. Prvé 2 bity som vypustil, aby som nemal také jemné rozlíšenie. Potreboval by som doplniť projekt o zápis a čítanie do internej eeprom, nejakým aretovaným tlačítkom, tzv "hold", na nejakom A1-A5 pine. Potrebujem hlavne pri vypnutí a zapnutí napájania, aby sa nastavila posledná hodnota výstupov, nezávisle na stave A0 vstupe. No a tu je môj problém. Nech hľadím do rôznych príručiek a eeprom, tým viac tomu nerozumiem a absolutne nechápem princíp. Akékoľvek moje úpravy s eeprom.h, projekt tvrdohlavo odmieta spoluprácu. Prosím vás, ak niekto má čas a pomôže mi to rozchodiť, budem vám veľmi vďačný. Ďakujem.
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 998
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Aruino v-meter

Príspevok od používateľa budvar10 » 06 Apr 2024, 12:17

Programátor musí byť absolútne dôsledný.
1. Oprav si nadpis.
2. Asi si zle použil ikonku na vkladanie kódu.
3. Aké Arduino? Nie všetky majú EEPROM.
4. Kód, čo si dal, neobsahuje nič s EEPROM.

Arduino IDE má príklady na použitie EEPROM. Pozeral si, skúšal? Čo konkrétne nefunguje?
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Aruino v-meter

Príspevok od používateľa jankrizan » 06 Apr 2024, 13:03

Ahoj budvar10, rád ťa opäť "vidím".
K tvojim otázkam.

Programátor musí byť absolútne dôsledný.
1. Oprav si nadpis.------------- Neviem aký nadpis máš na mysli
2. Asi si zle použil ikonku na vkladanie kódu.------------------ Áno, zabudol som odfajknúť zakazanie BBCode
3. Aké Arduino? Nie všetky majú EEPROM.----------------Mega328 má eeprom, či?
4. Kód, čo si dal, neobsahuje nič s EEPROM.----------------- Áno program je viacmenej originál z netu, jemne upravený k môjmu účelu. Tam nič nie je o eeprom. Preto píšem o úpravu programu, čo a kde vložiť a tak podobne. Samozrejme, ak sa to dá. Viem, že treba #include "EEPROM.h", že existuje EEPROM. get, EEPROM.put, ale ako to použiť, to je moc na mňa.
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 998
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Aruino v-meter

Príspevok od používateľa budvar10 » 06 Apr 2024, 15:11

Ahoj budvar10, rád ťa opäť "vidím".
:thumbup:
Neviem aký nadpis máš na mysli
Arduino v-meter
Mega328 má eeprom, či?
Áno, má. UNO alebo Nano, tak?
EEPROM. get, EEPROM.put, ale ako to použiť, to je moc na mňa.
https://docs.arduino.cc/learn/built-in- ... es/eeprom/
Sú tam aj príklady.

Kód: Vybrať všetko

EEPROM.put(address, data);
EEPROM.get(address, data);

int vystup_posledny_stav = 234;

    EEPROM.put(0x00, vystup_posledny_stav); //ulozis
    EEPROM.get(0x00, vystup_posledny_stav); //precitas

Je dobré vedieť veľkosť premennej. Napr. int je 2 bytes, t.j. ďalšiu premennú môžeš uchovať až na adrese 0x02.
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Aruino v-meter

Príspevok od používateľa jankrizan » 06 Apr 2024, 15:29

No jo. S tým nadpisom SORRY, nevšimol som si to. Ale inak si rozumieme? A ten odkaz -jojoj angličtina, nemáš v talone aj niečo po našom irečitom - slovak language?
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Aruino v-meter

Príspevok od používateľa jankrizan » 06 Apr 2024, 15:52

No, ja som z toho ... Dal som to do translatora, ale aj tak to nevlezie do mojej palice. Potrebujem v zapojení použiť tlačítko, kde pri stlačení urobí zápis, (memory), na výstupných pinoch a ignoruje stav vstupu A0. Po uvolnení tlačítka oätovne obnoví funkciu čítania stavu na vstupe A0. Pri vypnutí a zapnutí napájania potrebujem aby načítalo stav posledného zápisu tlačítka pred vypnutím. A to mám problém, implementovať tlačítko na túto funkciu. Úplne ideálne funguje zapojenie s prevodníkom ADC0804 akurát nemá eeprom pamäť, takže po zapnutí napájania, je stav výstupov závislý na stave vstupného napätia.
0

Používateľov profilový obrázok
mclareniak
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1212
Dátum registrácie: 21 Feb 2008, 00:00
Bydlisko: okr. Prievidza

Re: Aruino v-meter

Príspevok od používateľa mclareniak » 06 Apr 2024, 18:43

jankrizan napísal:
06 Apr 2024, 15:29
A ten odkaz -jojoj angličtina, nemáš v talone aj niečo po našom irečitom - slovak language?

Skus pozriet tu

Kód: Vybrať všetko

https://arduinoposlovensky.sk/kniznice/eeprom/
0
Keďže vedeniu fóra a niektorým užívateľom vadil obsah môjho podpisu, bol som požiadaný o odstránenie určitej časti. Preto som sa rozhodol odstrániť celý pôvodný podpis.

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 998
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Aruino v-meter

Príspevok od používateľa budvar10 » 06 Apr 2024, 20:39

A tačidlo vieš naprogramovať?
0

Používateľov profilový obrázok
enigma
Ultimate člen
Ultimate člen
Príspevky: 2509
Dátum registrácie: 24 Dec 2011, 15:21
Bydlisko: Nitra

Re: Aruino v-meter

Príspevok od používateľa enigma » 06 Apr 2024, 21:27

vieš si opraviť ten náslov ? už si na to bol upozornený , no nič sa neudialo. :pain:
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Aruino v-meter

Príspevok od používateľa jankrizan » 06 Apr 2024, 22:18

Tlačidlo, (ako rozsvietiť a zhasnúť led, to áno), ale myslim si, že to má súvis s prikazom do eeprom, tak to neviem. Ja som to už písal v starších príspevkoch že tie rôzne arduinovské príkazy neovládam, preto sa na vás obraciam s pomocou to spojazdniť. Ale, ak to je problém...?
Pre enigma -vieš si opraviť ten náslov ? - ak myslíš ten názov ( Aruino v-meter) tak prepáč. Myslím, že preklepov je v iných príspevkoch viac a netrhá to žily. A pritom každý vie o čo sa jedná.
0

Používateľov profilový obrázok
jezevec
Ultimate člen
Ultimate člen
Príspevky: 1778
Dátum registrácie: 22 Aug 2008, 00:00
Bydlisko: JM

Re: Aruino v-meter

Príspevok od používateľa jezevec » 06 Apr 2024, 22:25

Ale ty jsi byl na to upozorněný a místo jednoduché nápravy jsi arogantní.
To o tobě hodně vypovídá.
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 998
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Aruino v-meter

Príspevok od používateľa budvar10 » 06 Apr 2024, 22:33

Ak tlačidlom vieš rozsvieťiť/zhasnúť LED, podobne je to so zápisom do EEPROM. Skús dať nejaký kód. Čo nefunguje, skúsime sa pozrieť.
Potrebuješ uchovať stav pinov 6-13. Na to stačí jeden bajt.
0

jankrizan
Nový člen
Nový člen
Príspevky: 53
Dátum registrácie: 04 Mar 2011, 00:00
Vek: 64

Re: Aruino v-meter

Príspevok od používateľa jankrizan » 06 Apr 2024, 22:37

No ak niekto považuje preklep za aroganciu, tak sa vám všetkým ospravedlňujem. Opraviť to skutočne neviem, ako sa to robí? Otázku -vieš si opraviť ten náslov ? - v slovenskom jazyku, slovo - náslov- nepoznám, a nepozastavujem sa nad tým. Ale ak sa chcete rýpať v drobnostiach, môžme to ukončiť.
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 541
Dátum registrácie: 21 Feb 2022, 12:06

Re: Aruino v-meter

Príspevok od používateľa balu » 06 Apr 2024, 23:27

budvar10 napísal:
06 Apr 2024, 15:11

Kód: Vybrať všetko

EEPROM.put(address, data);
EEPROM.get(address, data);

int vystup_posledny_stav = 234;

    EEPROM.put(0x00, vystup_posledny_stav); //ulozis
    EEPROM.get(0x00, vystup_posledny_stav); //precitas
Je dobré vedieť veľkosť premennej. Napr. int je 2 bytes, t.j. ďalšiu premennú môžeš uchovať až na adrese 0x02.
A to nejde definovat takhle ? :

Kód: Vybrať všetko

EEPROM.put(address, data);
EEPROM.get(address, data);

int vystup_posledny_stav = 234;
EEMEM int EE_vystup_posledny_stav;

    EEPROM.put(&EE_vystup_posledny_stav, vystup_posledny_stav); //ulozis
    EEPROM.get(&EE_vystup_posledny_stav, vystup_posledny_stav); //precitas
O umístění dat v EEPROM by se pak postaral překladač.
-----------------------------------------------------------------------------------------------------------------------------------------------------
Neznám Arduino, ale když používám EEPROM, tak definuju data uložená v EEPROM takto :

Kód: Vybrať všetko

#include<avr/eeprom.h>

EEMEM int EE_Data1, EE_Data2;
EEMEM float EE_Data3, EE_Data4;
nebo (z funkčního programu)

Kód: Vybrať všetko

#include<avr/eeprom.h>

typedef struct ConfigurationStruct
{
    unsigned char AcceptedAddress[WLESS_ADDRESS_LENGHT];
} ConfigurationStruct;

typedef struct EE_ConfigurationStruct
{
    ConfigurationStruct Configuration;
    unsigned int CheckSum;
} EE_ConfigurationStruct;

ConfigurationStruct Configuration;

EEMEM EE_ConfigurationStruct EE_Configuration, EE_Configuration_Backup;

A čtení pak podle toho.
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 998
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Aruino v-meter

Príspevok od používateľa budvar10 » 07 Apr 2024, 08:38

@balu
Jedná sa o ATmega procesor, nielen to, že to je Arduino. Práca s EEPROM je trochu komplikovanejšia. Je potrebné si prečítať DS.

Nie takto, ako to píšeš, sa to síce nedá, ale nejdeš na to zle. EERef, tam už použiješ operátor priradenia, čo je definovaný. Problém je, že to nie je zdokumentované a ani v príkladoch to nie je. Pre začiatočníka asi nepoužiteľné, dokonca aj nebezpečné pre EEPROM. 100k zápisov a je po nej. Asi preto to nie je v dokumentácii.
To ale presahuje diskusiu v tomto vlákne o svetelý rok.

Samozrejme si môžeš vytvoriť definície na pozíciu v EEPROM. Čokoľvek, čo zvýši komfort.

Kód: Vybrať všetko

#define EE_VYSTUP_POSLEDNY_STAV  0 // postupne vytvorit komplet mapu EEPROM
#define EE_DALSIE_DATA  1

uint8_t vystup_posledny_stav;

void setup()
{
    EEPROM.get(EE_VYSTUP_POSLEDNY_STAV, vystup_posledny_stav);
 }   
alebo cez štruktúry. Ten stav výstupu sa dá ako bitové pole a celá alebo časť EEPROM ako štruktúra čítaná/zapisovaná ako jeden datový blok. Ale to už sa mi tu nechce rozpisovať. Možnosti sú.
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 541
Dátum registrácie: 21 Feb 2022, 12:06

Re: Aruino v-meter

Príspevok od používateľa balu » 07 Apr 2024, 09:29

-- přesunuto dále --
0
Naposledy upravil/-a balu v 07 Apr 2024, 10:19, upravené celkom 2 krát.

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1152
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Aruino v-meter

Príspevok od používateľa Atlan » 07 Apr 2024, 09:32

Zaujimave ze tam neni nikde if na kontrolu ci zapisana a zapisovana hodnota neni rovnaka. Za dalsie po 100tis zapisoch sa rozpadne ovlafacie tlacitko, takze eprom bude detail, okrem toho neverim ze zariadenie bude mat zivotnost taku dlhu aby sa vykonalo 100tis zapisov, skor zostarne cely ten projekt.
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 998
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Aruino v-meter

Príspevok od používateľa budvar10 » 07 Apr 2024, 10:00

@Atlan
Technicky je tam if, vnútorne to používa funkciu update a tá kontroluje identické dáta.
So 100tis zápismi som nemyslel zápis cez tlačidlo, ale ten class EERef. Ten umožní definovať premennú v EE a pracovať s ňou podobne ako v normálnej RAM. Nejaký začiatočník tam dá napr. počítadlo a je vymaľované.
Ale je to tam a dá sa to použiť napr. aj:
EEPROM[0] = ...

Len ten EERef class som nevidel v dokumentácii.

EDIT:
Tu je ten "if":

Kód: Vybrať všetko

EERef &update( uint8_t in )          { return  in != *this ? *this = in : *this; }
0

Používateľov profilový obrázok
balu
Pokročilý člen
Pokročilý člen
Príspevky: 541
Dátum registrácie: 21 Feb 2022, 12:06

Re: Aruino v-meter

Príspevok od používateľa balu » 07 Apr 2024, 10:19

budvar10 napísal:
07 Apr 2024, 08:38
@balu
Jedná sa o ATmega procesor, nielen to, že to je Arduino. Práca s EEPROM je trochu komplikovanejšia. Je potrebné si prečítať DS.
To jsi mně asi úplně nepochopil. To, že se jedná o AVR procesor je mi jasné z jedné z reakcí výše, jak se pracuje s EEPROM u AVR procesorů vím už z doby, kdy jsem AVRka programoval v assembleru, ale s Aduinem nedělám a postup definice "proměnných" (v tomto případě asi lépe říci definice umístění dat v EEPROM), jak jsem jí uvedl v příkladu je standartní použití v Atmel Studiu (nově Microchip Studiu), tak jsem předpokládal, že stejně (podobně) se definují místa pro data uložená v EEPROM v Arduinu.

Definovat umístění dat v EEPROM (nebo jakékoliv paměti) tímto způsobem

Kód: Vybrať všetko

#define EE_VYSTUP_POSLEDNY_STAV  0 // postupne vytvorit komplet mapu EEPROM
#define EE_DALSIE_DATA  1
mi připadá jako velice nestandartní. Že by člověk vypočítával umístění podle velikosti dat všech uložených hodnot před aktuální (v případě ukládání více, než jedné jediné proměnné) se mi moc nezdá, ale jak píšu s Arduinem nedělám, takže detaily neznám a proto jsem zde položil otázku, jak by se tohle dalo vyřešit v Arduinu.

Dají se totiž definovat i konstanty (nelze je měnít) i v programové paměti :

Kód: Vybrať všetko

const unsigned char PROGMEM StartText[]="ESP8266 Klient.\r\n";
const unsigned char PROGMEM StartText2[]="Text from Klient.\r\n";
V programu se pak čtou přímo z programové paměti.

Dost pochybuju, že ti, kteří pracují s periferiemi tak, že zvládnout napsat maximálně XY.begin() a když to nefunguje, tak končí, že zvládnou počítat, kolik která proměnná potřebuje místa, aby pro ně "rezervovali" místo v EEPROM.

=======================================================================================

Pokud nelze umístění dat v EEPROM provést tak, jako v Atmel Studiu, nadefinoval bych proměnné, které se ukládají/čtou z EEPROM následujícím způsobem. Je to sice o něco pracnější, ale daleko bezpečnější.

1) Začal bych nadefinováním typu, který se jako blok bude do EEPROM ukládat :

Kód: Vybrať všetko

typedef struct EEPROM_DataStruct
{
  int PromennaTypuInt;
  int DruhaPromennaTypuInt;
  unsigned int PromennaTypuUnsignedInt;
  char PromennaChar;
  char RetezecDlouhy19Znaku[20];
} EEPROM_DataStruct;
2) Nadefinovat proměnnou (v podstatě seznam proměnných ukládaných do EEPROM) - ta je v RAM :

Kód: Vybrať všetko

EEPROM_DataStruct EEPROM_Data;
3) Práce s proměnnými :

Kód: Vybrať všetko

    EEPROM_Data.PromennaTypuInt = 1685;
    EEPROM_Data.DruhaPromennaTypuInt = -276;
    EEPROM_Data.PromennaTypuUnsignedInt = 19253;
    EEPROM_Data.PromennaChar = 'C';
    strcpy (EEPROM_Data.RetezecDlouhy19Znaku, "Testovací");
4) Uložení a načtení celého bloku (struktury) do/z EEPROM :

Kód: Vybrať všetko

  UlozitDoEEPROM((unsigned char *)&EEPROM_Data, sizeof(EEPROM_Data), 0);
  PrecistZEEPROM((unsigned char *)&EEPROM_Data, sizeof(EEPROM_Data), 0);
5) A tady jsou funkce, které se starají o uložení/načtení proměnné do/z EEPROM :

Kód: Vybrať všetko

void UlozitDoEEPROM(unsigned char *__Buffer, int __PocetBytu, int __StartAdresa)
{
  for (int _Idx = 0 ; _Idx < __PocetBytu ; _Idx++ )
  {
    EEPROM.update(__StartAdresa + _Idx, __Buffer[Idx]);
  }
}

void PrecistZEEPROM(unsigned char *__Buffer, int __PocetBytu, int __StartAdresa)
{
  for (int _Idx = 0 ; _Idx < __PocetBytu ; _Idx++ )
  {
    __Buffer[_Idx] = EEPROM.read(__StartAdresa + _Idx);
  }
}
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 998
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Aruino v-meter

Príspevok od používateľa budvar10 » 07 Apr 2024, 10:32

@balu
Chápem čo píšeš. Ja už tiež Arduino veľmi nepoužívam. Ono sa to vyvíja a nejako to veľmi nesledujem.
Osobne si ale myslím, že najefektívnejšie je používať funkcie definované avrlib:
eeprom_read_block, eeprom_write_block pre blokový zápis atď.
Ono práca s AVR EEPROM má určité špecifiká a napr Arduino knižnica používa len eeprom_read_byte a eeprom_write_byte. Len tieto 2 funkcie a to nie je práve najefektívnejšie.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok