|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Brusli Član
Pridružen-a: Tor 24 Nov 2020 12:10 Prispevkov: 139 Aktiv.: 3.42 Kraj: Hrastnik
|
Objavljeno: Sre Dec 22, 2021 8:20 pm Naslov sporočila: |
|
|
Silvo, tole pa lepo zgleda. Kako pa shranjuješ tiste vzorce oz. kombinacije utripanja? Če prav vidim, imaš programe spisane kar v zaporedju vrednosti od 0 do 255 za vsako lediko posebej in vmes kratka pavza (fiksna hitrost)?
Jaz sem si pred leti sprogramiral nekaj podobnega, vendar sem namesto RGB ledik uporabil 4 izhode za 4 različne barve ledik (verga). Kombinacije utripanja sem pa spisal kot funkcije v C-ju, vendar pa mi je na koncu na ATmega328P zmanjkalo flash prostora zaradi prevelikega števila kombinacij. Ravnokar pa sem dobil nekaj novejših čipov AVR128DB32 s 128kB flasha, ki bo poganjal novo ploščo z 8 PWM izhodi.
lp |
|
Nazaj na vrh |
|
|
lojzek Član
Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3352 Aktiv.: 17.02
|
Objavljeno: Sre Dec 22, 2021 9:25 pm Naslov sporočila: |
|
|
brusli
Citiram: |
na ATmega328P zmanjkalo flash prostora zaradi prevelikega števila kombinacij.
|
Včasih je v 38kb prostora prišla cela igrica (komodor64) in to kar fletna. V spektruma še manjši špomin.
Če ti je v 32kB + EEPROM zmanjkalo spomina - Oče, oprosti,grešim.
Uporabi stvar, kot se spodobi. Arduino meni vozi kolektor z 8 senzorji 2 leti, atmega16 s 5 senzorji kurilnico že xy let, pa je oboje še vsaj 3/4 prazno. Pa sem daleč od tega, da bi kaj optimiral kodo.
Nič ne mislim slabega, ampak Tiny13 je za lučke že uveeeeerkill. Kolikor ima prostih tačk, toliko izhodov (6) Če pa kako tipko uporabiš, 5 izhodov. Če reset pustiš pri miru, pa še enega manj. |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14551 Aktiv.: 65.53 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sre Dec 22, 2021 10:06 pm Naslov sporočila: |
|
|
Brusli je napisal/a: |
Silvo, tole pa lepo zgleda. Kako pa shranjuješ tiste vzorce oz. kombinacije utripanja? Če prav vidim, imaš programe spisane kar v zaporedju vrednosti od 0 do 255 za vsako lediko posebej in vmes kratka pavza (fiksna hitrost)?
lp |
Pišem v assemblerju zato je pomnilnika še vedno dovolj-mi pa zmanjkuje idej. Za enkrat je spisanih 32 programov. Porabljenga 40% pomnilnika Mege328 V povprečju vsakega ženem ca 30 sec, tako da je treba čakati okrog 15 minut, da se obrne. Malo sem štel instrukcije, da sem spisal glavno proceduro za pošiljanje na diode. Procesor je pognan z internim oscilatorjem 8Mhz. Je šlo kar na tesno, ker so timingi v nS (1.25µs±600ns en bit ) Za eno diodo je potrebno poslati 24bitov (3byte) Na procesorju je porabljen le en pin Pred pošiljanjem željeno pripravim v ram potem preko X-registra potisnem na pin. Spisal sem razne procedure, ki pred pošiljanjem "mešajo" ta ram in s tem tvorijo kombinacije. Spisal sem si tudi PC-programček za pripravo tega rama. Programček mi zgenerira kodo v obliki tabele, katero potem potisnem v ram. _________________ lp
Silvo |
|
Nazaj na vrh |
|
|
TRAFO Član
Pridružen-a: Sre 07 Dec 2011 22:58 Prispevkov: 61 Aktiv.: 0.41 Kraj: TOLMIN
|
Objavljeno: Sre Dec 22, 2021 11:47 pm Naslov sporočila: Re: Kaj trenutno počnem December 2021 |
|
|
SimonS je napisal/a: |
Bom pa jaz prvi
Delam tehnico za čebelje panje. Baterijsko napajanje in logiranje teže na serverju
Trenutno mi živce žre lastna poraba 1117, ki je kar 7mA. To moram nujno znižati na <100uA |
NCP730 pride tudi pod 1uA. Sprobano.
https://eu.mouser.com/c/?q=NCP730
Samo se kar čaka na dobavo. |
|
Nazaj na vrh |
|
|
Traflc Član
Pridružen-a: Sob 06 Dec 2003 21:48 Prispevkov: 365 Aktiv.: 1.64 Kraj: Javornik Jesenice
|
Objavljeno: Pon Dec 27, 2021 10:16 pm Naslov sporočila: |
|
|
Jaz pa se ubijam s temle programčkom. Poskušam narediti rc ESC za krtačne motorčke. Uporabljam zaenkrat digispark, kasneje pa bi preselil na attiny85.
No s tem programom mi desna polovica ročice deluje kot je treba.
Leva stran pa se ne odziva. H most preverjeno dela tako da ni problem v železju pač pa v programu. Ne vem kje ga biksam 🤔
Koda: |
int input=0;
int output1=1;
int output2=2;
#define MIDDLE_POINT 1550
void setup() {
pinMode(output1, OUTPUT);
pinMode(output2, OUTPUT);
pinMode(input, INPUT);
}
void loop() {
int val=pulseIn(input,HIGH);
int pwm=map(val,1000,2200,-500,500);
pwm=constrain(pwm,0,255);
if (val < MIDDLE_POINT) {
digitalWrite(output1, LOW);
analogWrite(output2, pwm);
}
else if (val > MIDDLE_POINT) {
digitalWrite(output2, LOW);
analogWrite(output1, pwm);
}
delay(5);
} |
_________________ Lp. Traflc |
|
Nazaj na vrh |
|
|
lojzek Član
Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3352 Aktiv.: 17.02
|
Objavljeno: Tor Dec 28, 2021 2:45 pm Naslov sporočila: |
|
|
Kolikor zastopim tvoj program.... "val" je spremenljivka, ki jo spreminjaš z ročicami. In jo primerjaš z neko določeno vrednostjo....
Jaz bi najprej poizkusil (če imaš možnost) preveriti vrednost "val", jo izpisati na nekaj,...
PS, velikokrat me je zaklala osnovna stvar... Ali imaš stvari priključene na prave pine- uporabljene v programu in če so ti pravilno skonfigurirani.
Pa še to - jaz bi poizkusil poskusil z izbrisom "else"... v drugem pogoju. |
|
Nazaj na vrh |
|
|
ecobra Član
Pridružen-a: Pet 27 Jun 2014 14:16 Prispevkov: 310 Aktiv.: 2.61 Kraj: Radeče
|
Objavljeno: Tor Dec 28, 2021 3:47 pm Naslov sporočila: |
|
|
Traflc je napisal/a: |
J
int pwm=map(val,1000,2200,-500,500);
pwm=constrain(pwm,0,255);
|
Kot razumem tale programček ti zaradi "constrain" ukaza dela samo v območju od 0-255 in ne od -500 do 500 kot si ti želiš.
Če prav mislim, ti že pri četrtini pomika ročice v desno pwm doseže polno vrednost na izhodu.
l.p.
lahko se pa motim _________________ Luna sije, pa ne greje.
Piška pije, pa ne šči...
Uzdaj se use i svoje kljuse. |
|
Nazaj na vrh |
|
|
Traflc Član
Pridružen-a: Sob 06 Dec 2003 21:48 Prispevkov: 365 Aktiv.: 1.64 Kraj: Javornik Jesenice
|
Objavljeno: Tor Dec 28, 2021 5:35 pm Naslov sporočila: |
|
|
Evo sedaj pa bo. Digispark mi nikakor noče delat pravilno razen s pinoma 1 in 4 kot izhod.
Program sem malenkost popravil in sedaj deluje.
Koda: |
int output1=1;
int output2=4;
#define MIDDLE_POINT 1550
void setup() {
pinMode(output1, OUTPUT);
pinMode(output2, OUTPUT);
pinMode(input, INPUT);
}
void loop() {
int val=pulseIn(input,HIGH);
int pwm=map(val,1000,2200,-500,500);
pwm=constrain(pwm,-255,255);
if (val < MIDDLE_POINT) {
pwm=(-pwm);
digitalWrite(output1, LOW);
analogWrite(output2, pwm);
}
if (val > MIDDLE_POINT) {
digitalWrite(output2, LOW);
analogWrite(output1, pwm);
}
delay(5); |
_________________ Lp. Traflc |
|
Nazaj na vrh |
|
|
Traflc Član
Pridružen-a: Sob 06 Dec 2003 21:48 Prispevkov: 365 Aktiv.: 1.64 Kraj: Javornik Jesenice
|
Objavljeno: Tor Dec 28, 2021 5:38 pm Naslov sporočila: |
|
|
Ja in potem sem šel preverjat kateri pini so PWM
Seveda 1 in 4 hehe. No samo da mi je uspelo.
Hvala za predloge in pomoč _________________ Lp. Traflc |
|
Nazaj na vrh |
|
|
ecobra Član
Pridružen-a: Pet 27 Jun 2014 14:16 Prispevkov: 310 Aktiv.: 2.61 Kraj: Radeče
|
Objavljeno: Tor Dec 28, 2021 6:31 pm Naslov sporočila: |
|
|
Traflc je napisal/a: |
}
void loop() {
int val=pulseIn(input,HIGH);
int pwm=map(val,1000,2200,-500,500);
pwm=constrain(pwm,-255,255);
|
Ne vem zakaj mapiraš na -500, 500 in potem omejuješ na 255.
Zakaj ne kar v enem koraku:
int pwm=map(val,1000,2200,-255,255);
in naslednji korak:
pwm= abs(pwm)
mogoče se motim _________________ Luna sije, pa ne greje.
Piška pije, pa ne šči...
Uzdaj se use i svoje kljuse. |
|
Nazaj na vrh |
|
|
Traflc Član
Pridružen-a: Sob 06 Dec 2003 21:48 Prispevkov: 365 Aktiv.: 1.64 Kraj: Javornik Jesenice
|
Objavljeno: Tor Dec 28, 2021 7:18 pm Naslov sporočila: |
|
|
Sem se malo igral s številkami map.. Ampak če sem dal - 255,255 mi ni na izhodu dal polne moči kar mi je bilo čudno zato sem dvignil številke.
Se bom ob priliki še malo poigral s tvojim predlogom @ecobra
Zaenkrat zadeva "špila" 😁
Sicer sem na youtube našel en podoben esc ampak mi njegovo delovanje ni bilo všeč. V mirovanju je namreč na izhodu dajal ene špice in posledično vklapljal motor. Najbrž zato ker je uporabljal interrupt.
Zato sem se potem odločil za svoj esc. _________________ Lp. Traflc |
|
Nazaj na vrh |
|
|
ecobra Član
Pridružen-a: Pet 27 Jun 2014 14:16 Prispevkov: 310 Aktiv.: 2.61 Kraj: Radeče
|
Objavljeno: Tor Dec 28, 2021 7:38 pm Naslov sporočila: |
|
|
Traflc je napisal/a: |
Sicer sem na youtube našel en podoben esc ampak mi njegovo delovanje ni bilo všeč. V mirovanju je namreč na izhodu dajal ene špice in posledično vklapljal motor. Najbrž zato ker je uporabljal interrupt.
Zato sem se potem odločil za svoj esc. |
Tudi pri tebi se lahko pojavijo špice v mirovanju, to pa zato ker nimaš definirane mrtve cone okoli vrednosti 1550.
Ta vrednost je zelo ozka in v primeru nihanja časa impulza se bo ta vrednost gibala več ali manj okoli 1550 in takrat bo nemiren motor.
V if stavku bi spremenil if (val >= 1499 ); ali poljubno manj,
in naslednji if (val <= 1551 ); ali poljubno več.
Približno tako razmišljam.
l.p. _________________ Luna sije, pa ne greje.
Piška pije, pa ne šči...
Uzdaj se use i svoje kljuse. |
|
Nazaj na vrh |
|
|
Traflc Član
Pridružen-a: Sob 06 Dec 2003 21:48 Prispevkov: 365 Aktiv.: 1.64 Kraj: Javornik Jesenice
|
Objavljeno: Tor Dec 28, 2021 9:38 pm Naslov sporočila: |
|
|
Hvala za nasvet
No tam pri tistem programu s tube je bil "deadzone" pa je kljub temu prihajalo do špic.
Z mojim programom teh težav ne opažam.
Kljub temu pa bom še dodal:
#define deadzone = 60
In potem v if stavkih if (val <=(MIDDLE_POINT-deadzone)){...
Predvidevam, da bi bilo pametno potem še dodati
else{
Pwm=0;
} _________________ Lp. Traflc |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 47 dni
Powered by phpBB © 2001, 2005 phpBB Group
|