knihovna IO_Port_8bit.h ovládání LED

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
JosefChroustal
Příspěvky: 6
Registrován: ned úno 19, 2023 6:57 pm

knihovna IO_Port_8bit.h ovládání LED

Příspěvek od JosefChroustal »

Dobrý den,

můj problém spočívá ve svitu LED.
Stáhnul jsem si knihovnu IO_Port_8bit.h a zkusil některé ukazkové programy, ty sice fungují, ale LED téměř nesvítí, pokud však použiju příkaz digitalWrite(2,HIGH); tak se mi příslušná LED rozsvítí plným jasem.

A tak chci poprosit o pomoc s tím kde je chyba?

Předem moc děkuji.
dusanmsk
Příspěvky: 315
Registrován: pát říj 15, 2021 10:41 am
Lokalita: Stredocesky kraj
Systémové napětí: 48V
Výkon panelů [Wp]: 11250
Kapacita baterie [kWh]: 9.6
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od dusanmsk »

A si si isty, ze si na spravnom fore? Okrem toho z tej otazky nie je ani jasne, co vlastne chces.
30*375 Wp JJZ, 2xXTM4000, 2xVT-80, 2xUS5000
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od rottenkiwi »

Tu je priklad voltage indikator:

Kód: Vybrat vše

#include<IO_Port_8bit.h>

IO_Port_8bitmyport(2, 3, 4, 5, 6, 7, 8, 9, ’O’); //create output port object

void setup()

{

myport.send_8bit_data(255); //blink all LEDs of bar graph once

delay(500);

myport.send_8bit_data(0);

}

void loop()

{

int level;

level = analogRead(A0); //read analog input voltage

level = map(level, 0, 1023, 0, 80);// limit thevoltage from 0 to 80

//increase or decrease bar graph level asper input

if((level<80) && (level>70))myport.send_8bit_data(255);

elseif((level<=70) && (level>60)) myport.send_8bit_data(127);

elseif((level<=60) && (level>50)) myport.send_8bit_data(63);

elseif((level<=50) && (level>40)) myport.send_8bit_data(31);

elseif((level<=40) && (level>30)) myport.send_8bit_data(15);

elseif((level<=30) && (level>20)) myport.send_8bit_data(7);

elseif((level<=20) && (level>10))myport.send_8bit_data(3);

elseif((level<=10) && (level>0)) myport.send_8bit_data(1);

elseif(level==0) myport.send_8bit_data(0);

}
To jak svietia LED ovplyvnuju odpory.

Ak chcem, aby LED plynule zhasinali tak musim pouzit na dany pin PWM.
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
JosefChroustal
Příspěvky: 6
Registrován: ned úno 19, 2023 6:57 pm

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od JosefChroustal »

Omlouvám se za nepřesný dotaz.

Situace je následující. Arduino má na svém pinu č.2 LED, za ní je rezistor 390Ohm a uzemnění.

Pokud dám příkaz digitalWrite(2,HIGH); rozsvítí se LED plným jasem.

Pokud dám příkaz myport.send_8bit_data(1); LED sotva svítí.

A ve složitějším popisu by bylo 8xpříkaz digitalWrite(x,HIGH) kde x=číslo pinu a všechny LED svítí plným jasem.
A příkaz myport.send_8bit_data(255); kde (255) určuje všech 8 LED najednou, sotva svítí.

Ještě upřesnují že řeším u LED pouze dva stavy-svítí plným jasem a nesvítí. Plynulé ovládání jasu a PWM nepotřebuji.

Všechny LED jsou zapojené na PIN-LED-REZISTOR-GND a velikost rezistoru je 390Ohm a nemění se a nic nepřepájím.
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od rottenkiwi »

Tak zistit kde je problem. AKy je kod ?
AKo su nastavene piny ?
Odkial bola kniznica stiahnuta.

Rovnako to nefunguje aj na inom Arduine ?
Co ukazuje multimeter alebo osciloskop ?
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
JosefChroustal
Příspěvky: 6
Registrován: ned úno 19, 2023 6:57 pm

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od JosefChroustal »

Zdrojový kod je originální, stáhnutý s knihovnou v jednom zip balíku.

#include<IO_Port_8bit.h>

IO_Port_8bit myport(2,3,4,5,6,7,8,9,'O');
void setup()
{

}

void loop()
{
int i;
for(i=0;i<255;i++)
{
myport.send_8bit_data(i);
delay(1000);
}
}

Multimetr ukazuje napětí 1,68V, Osciloskop nevlastním a jiná Arduina také ne, mám jen toto jedno, 10ks je objednáno a přijdou asi za měsíc.

Knihovna pochází z této adresy:
https://www.hackster.io/ambhatt/8-bit-i ... 5_1-NTphRI
Naposledy upravil(a) JosefChroustal dne ned úno 19, 2023 10:20 pm, celkem upraveno 1 x.
JosefChroustal
Příspěvky: 6
Registrován: ned úno 19, 2023 6:57 pm

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od JosefChroustal »

Heuréka, problém vyřešen.

do smyčky void setup () stačilo přidat příkaz pinMode

void setup()
{
pinMode(9, OUTPUT);
}

a najednou mi LEDky svítí plným jasem, což jsem potřeboval.

Čemu ale nerozumím, proč to chybí v originálním kodu a proč nastavuju jen pin 9, ačkoliv to je nejvyšší bit(127)?
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od kodl69 »

V origo kódu to nechybí, je to v knihovně, a je to definovaný tím ¨I¨ nebo ¨O¨ na konci definice těch pinů. proč to jede korektně netuším, ale tvoje řešení je prasárna. Knihovna není velká věda, asi bych ji dal pryč a do kódu si zkopíroval jenom tu část

Kód: Vybrat vše

 void IO_Port_8bit::send_8bit_data(int byt)
   {
      int d=0;
      int binary[8] = {0,0,0,0,0,0,0,0};
      Serial.begin(9600);
      if (byt>255) Serial.println("Error! You are trying to send data having value greater than 8-bit (>255)");
      else
       {
          while(byt>0)
          {
            binary[d] = byt%2;
            byt = byt/2;
            d++; 
          }
          if(binary[0]==1) digitalWrite(pin_1,HIGH);
          else digitalWrite(pin_1,LOW);
          if(binary[1]==1) digitalWrite(pin_2,HIGH);
          else digitalWrite(pin_2,LOW);
          if(binary[2]==1) digitalWrite(pin_3,HIGH);
          else digitalWrite(pin_3,LOW);
          if(binary[3]==1) digitalWrite(pin_4,HIGH);
          else digitalWrite(pin_4,LOW);
          if(binary[4]==1) digitalWrite(pin_5,HIGH);
          else digitalWrite(pin_5,LOW);
          if(binary[5]==1) digitalWrite(pin_6,HIGH);
          else digitalWrite(pin_6,LOW);
          if(binary[6]==1) digitalWrite(pin_7,HIGH);
          else digitalWrite(pin_7,LOW);
          if(binary[7]==1) digitalWrite(pin_8,HIGH);
          else digitalWrite(pin_8,LOW);
       }  
a na začátku definoval pin_1 až pin_8 a nastavil je jako výstupy, pokud od toho víc nechceš. Knihovna je hodna indickýho programátora, a asi i ta funkce by šla napsat jednodušej...
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od kodl69 »

Jo a posloucháš na sériovým portu, jestli ti to nepíše chyby typu "direction not set?"
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
dusanmsk
Příspěvky: 315
Registrován: pát říj 15, 2021 10:41 am
Lokalita: Stredocesky kraj
Systémové napětí: 48V
Výkon panelů [Wp]: 11250
Kapacita baterie [kWh]: 9.6
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od dusanmsk »

Takze cielom je rozsvietit, alebo zhasnut ledky? To ma byt led ukazatel nejakej veliciny? Na co je tam ta 8bit kniznica? Rozsvietenie a zhasnutie LED je otazka 1 riadku (a inicializacia pinMode druheho).
30*375 Wp JJZ, 2xXTM4000, 2xVT-80, 2xUS5000
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od kodl69 »

jestli jsem to pochopil, tak je to "binární displej" tak jsem d době ttl měl udělaný hodiny, na kterejch nikdo nepoznal, kolik je hodin :) prostě každej bit z čísla má přiřazenou jednu LED. tj když na dy piny pověsíš 2ks D147 a dsedmisegmenty, tak ti to ukáže hex... Taky nevím, k čemu je to dobrý. Jestli to má být indikátor napětí baterie, tak to umím jednodušej a přímočařej, a to jsem spojovač arduino příkladů, ne programátor.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
JosefChroustal
Příspěvky: 6
Registrován: ned úno 19, 2023 6:57 pm

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od JosefChroustal »

Ja jsem napsal pouze tu cast problemu, ktery resim. Protoze rozepisovat cele moje uzce zamerene zapojeni, urcene pro rizeni navestidel v jedne zeleznicni expozici, jenze to by presahlo ramec prispevku a ztratil by se dotaz. V kostce doslo k tomu ze jsem presel z procesoru PICAXE na Arduino. Ovsem diky knihovne, nemusim menit data odesilana z pocitace do Arduina, tim nemusim menit program v pocitaci.

Kodl69:
Sahnul jsem po knihovne i z casovych duvodu. Odesilam data z PC a zpracovavam je v ARD a protoze nemam tolik casu, kolik bych si predstavoval, byla ta knihovna rychle reseni, behem par okamziku.

Dekuji za sepsany kod, usetril jsi mi dobre 3mesice prace (nemam tolik casu, venovat se vecem z expozice), asi bych k tomuto reseni dosel take, ale za mnohem delsi cas, takhle jsi to udelal za me, ja ti dekuji a za prasarnu tak budu povazovat, ze mam kod naprosto zadarmo. Diky.

Dusanmsk:ne, urceno ke spinani rele.
cipis
Příspěvky: 4360
Registrován: pon srp 16, 2021 9:31 pm
Lokalita: blízko Brna
Bydliště: blízko Brna

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od cipis »

Čéče, to je dobrá haluz, ptát se na fotovoltaickém fóru na kód pro ovládání vláčků :D Ale já mám vláčky rád (H0, N) ...
Ostatně oboje je to zábava :handshake2:
9,77 kWp: 6240 Wp Jih, 2040 Wp Východ, 1490 Wp Západ
Regulátory Epever a Victron
Phoenix 2 kVA + MP 24/5000 (můj byt + wifi/kamery/atd. + máti byt)
Epever 3kW vytěžování do bojlerů + žebříky
CARSPA aktuálně odpojené
1 kW "nabíječka" 24 V
31 080 Wh staré olovo 7 488 Wh Li-Ion
Modře píši jako moderátor, černě jako člen.
Charlie_XZ
Příspěvky: 50
Registrován: pon led 06, 2020 5:58 pm

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od Charlie_XZ »

kodl69 píše:... Knihovna je hodna indickýho programátora, a asi i ta funkce by šla napsat jednodušej...
Když jsem ten kód viděl tak mi začlo krvácet z očí :shock:
Uživatelský avatar
rottenkiwi
Příspěvky: 5451
Registrován: pát úno 13, 2015 2:24 pm
Lokalita: SO, SK
Bydliště: SO, SK

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od rottenkiwi »

Ano shiftnut register sme sa ucili este v 1989 v Turbo Assembleri.

Kód: Vybrat vše

void bits(int h){
if (!h) return;
bits(h>>1);
printf(“%d”,h&1);
return;
}
Prelozit, pozriet ako to robi compiler pre dane CPU a urobit to efektivnejsie.
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
JosefChroustal
Příspěvky: 6
Registrován: ned úno 19, 2023 6:57 pm

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od JosefChroustal »

Charliexz:
Koho kod? Muj nebo od Kodl69?
Uživatelský avatar
TomHC
Příspěvky: 1283
Registrován: pát lis 11, 2022 8:14 am
Lokalita: Hlohovec, SR
Systémové napětí: 48V
Výkon panelů [Wp]: 5520
Kapacita baterie [kWh]: 14
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Hlohovec, SR

Re: knihovna IO_Port_8bit.h ovládání LED

Příspěvek od TomHC »

rottenkiwi píše:Ano shiftnut register sme sa ucili este v 1989 v Turbo Assembleri.

Kód: Vybrat vše

void bits(int h){
if (!h) return;
bits(h>>1);
printf(“%d”,h&1);
return;
}
Prelozit, pozriet ako to robi compiler pre dane CPU a urobit to efektivnejsie.
No jasné, vláčiky treba riadiť v assembleri. Ďalší globálny problém ľudstva sme práve vyriešili...
MUST PV1800 VHM 48V 5.5kW, 5.52kWp (12x TPL mono 460W, 2S2P východ, 2S4P juh), 16x 280 Ah LiFePO4 (14.3 kWh) BMS JBD-AP21S001-L21S-200A-B, SW: Home Assistant na Synology DS923+ ku tomu ESPHome, Tasmota, MariaDB, InfluxDB, Telegraf, Grafana, Zigbee2MQTT..., HW: ESPlan (ESP32 + LAN 8720 + RS485 + UART). Nejaké moje projekty: MUST-ESPhome, ELTEK Flatpack2 ESPhome, ESP32-EMON, PZEM-017@WiFi, diyBMS-CurrentShunt-ESPhome

  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek