programovanie v c
Moderátori: psichac, Moderátori
- boraicho
- Ultimate člen
- Príspevky: 12411
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: programovanie v c
AD-LCD.c:279: error: (1387) inline delay argument must be constant
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
Re: programovanie v c
Nesmie tam byt premena ale konkretne cislo.
Pac to oneskorrnie prrkladac, vypocita a vytvori kod o pevnej dlzke oneskorrnia. A tento kod napalis do flash, tak logicky to nemoze byt premena.
Pouzi nejaky casovac, aj tak ti ho trrba pre normalny beh programu. (multitasking)
Pac to oneskorrnie prrkladac, vypocita a vytvori kod o pevnej dlzke oneskorrnia. A tento kod napalis do flash, tak logicky to nemoze byt premena.
Pouzi nejaky casovac, aj tak ti ho trrba pre normalny beh programu. (multitasking)
0
Re: programovanie v c
Dalo by sa to obísť opakovaním kratšieho delay v slučke, nejako takto:
int tt=1;
tt = analogRead(pin);
for (int i=tt, i=0, i--)
{ delay(10);
}
int tt=1;
tt = analogRead(pin);
for (int i=tt, i=0, i--)
{ delay(10);
}
0
Re: programovanie v c
z povahy tvojej otazky vypliva ze programovanim sa zivit nebudes (ked uz nie programovanie , tak bez zakladov anglictiny sa tu nezaobides)boraicho napísal:AD-LCD.c:279: error: (1387) inline delay argument must be constant
na tvojom mieste , na domace hrajkanie, vytiahnem zatracovane Arduino
funguju delay, blikas ako chces, nemusis manipulovat portami ak nechces / nevies, a vela vela delsieho vdaka comu som ja zacal aspon zaklady programovania MCU (ani zo mna nikdy programator nebude, ale som s tym zmiereny)
0
- boraicho
- Ultimate člen
- Príspevky: 12411
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: programovanie v c
misočko, prosim ešte raz, absolutne som nepochopil čo si napisal
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
- niki31
- Stály člen
- Príspevky: 172
- Dátum registrácie: 05 Feb 2010, 00:00
- Bydlisko: Žilinský kraj
- Vek: 49
Re: programovanie v c
Neviem s akým kompilátorom pracuješ, ale v ccs c to funguje bez problému. Môžeš čas vložiť cez premennú. V Mcc18 sa tuším podľa hodnoty času vložilo makro s pevným počtom prechodov slučkou. Hodnotu teda bolo možné zmeniť iba v čase prekladu programu, potom už nie. XC to má asi podobne.
Treba čítať manuál.
Treba čítať manuál.
0
Niki31
Re: programovanie v c
Boraicho. OK. Skusim jednoduhsie.
Napisalo ti to ze argument v delay musi byt konstanta. (Po anglicky samozrejme) Ty sa pytas preco tam nemoze byt premenna.
Napisalo ti to ze argument v delay musi byt konstanta. (Po anglicky samozrejme) Ty sa pytas preco tam nemoze byt premenna.
0
- boraicho
- Ultimate člen
- Príspevky: 12411
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: programovanie v c
niki diky za koment, Je možne kompilovať programy do procesora v ccs?
Ja použivam XC8 . Viem že by bolo dobre čitať manual, ale to by som cely život nič nerobil iba čital manual. Bohužiaľ, mám kopec úplne inej roboty, ktoré mi platia šeky. Už vidim ako pribehne mato3000 a další miloško že za tie roky by som to mohol vedieť, ale neberu do uvahy veľmi doležitu vec, že ak človek programuje raz v roku 3dni , čo je môj prípad atď.... čo som napísal na pochopenie stačí , kto chce pochopí , kto nie, tak tomu dávam do pozoru slovíčko bocyan...
misočko vkladaš mi do úst veci , alebo do prstov veci ktore som nenapisal, pytal som sa ako meniť počas chodu jeho parameter....
O premene nepadlo ani slovo, ak hej tak ukaž.
Tak načo rýpeš? žena ti nedá?
Ja použivam XC8 . Viem že by bolo dobre čitať manual, ale to by som cely život nič nerobil iba čital manual. Bohužiaľ, mám kopec úplne inej roboty, ktoré mi platia šeky. Už vidim ako pribehne mato3000 a další miloško že za tie roky by som to mohol vedieť, ale neberu do uvahy veľmi doležitu vec, že ak človek programuje raz v roku 3dni , čo je môj prípad atď.... čo som napísal na pochopenie stačí , kto chce pochopí , kto nie, tak tomu dávam do pozoru slovíčko bocyan...
misočko vkladaš mi do úst veci , alebo do prstov veci ktore som nenapisal, pytal som sa ako meniť počas chodu jeho parameter....
O premene nepadlo ani slovo, ak hej tak ukaž.
Tak načo rýpeš? žena ti nedá?
boraicho napísal:Neviete niekto ako spraviť aby ked použivam delay čiže __delay_ms(); ale ten čo je v knižnici priamo zakomponovany,
tak som mohol počas chodu meniť jeho parameter , čiže čas?
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
-
- Ultimate člen
- Príspevky: 2581
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: programovanie v c
A ako inak než premennou by ste to chceli za chodu meniť?
Podstata je tá, že keď kompilátor tam chce konštantu, tak to musí byť konštanta a dovidenia. Nič čo sa môže meniť počas behu programu tam neskompiluje.
A všade používať delay je cesta do pekiel. Už viackrát sa tu potom začiatočníci čudovali, že tlačidlo reaguje len raz za sekundu a podobne.
Podstata je tá, že keď kompilátor tam chce konštantu, tak to musí byť konštanta a dovidenia. Nič čo sa môže meniť počas behu programu tam neskompiluje.
A všade používať delay je cesta do pekiel. Už viackrát sa tu potom začiatočníci čudovali, že tlačidlo reaguje len raz za sekundu a podobne.
0
- niki31
- Stály člen
- Príspevky: 172
- Dátum registrácie: 05 Feb 2010, 00:00
- Bydlisko: Žilinský kraj
- Vek: 49
Re: programovanie v c
Úplne všetko čo robí XC8 robí aj CCS c akurát je to od inej firmy.
Čo sa týka toho oneskorenia maskrtnik01 má pravdu. Ak kompilátor zostaví čakaciu slučku pri preklade, za behu už nejde meniť. Ak chceš meniť čas za behu je treba použiť nejakú čakaciu rutinu. Buď vlastnú alebo z knižnice. Alebo to obmedzenie obísť. Priznám sa že ma nenapadá na čo by to bolo dobré. Ja čakacie slučky nepoužívam, namiesto toho si vytvorím časovač s prerušením (hardwarový alebo softwarový). Po vypršaní času si v prerušení obslúžim čo potrebujem. Procesor tak beží neustále naplno a nestráca čas pri čakaní.
Čo sa týka toho oneskorenia maskrtnik01 má pravdu. Ak kompilátor zostaví čakaciu slučku pri preklade, za behu už nejde meniť. Ak chceš meniť čas za behu je treba použiť nejakú čakaciu rutinu. Buď vlastnú alebo z knižnice. Alebo to obmedzenie obísť. Priznám sa že ma nenapadá na čo by to bolo dobré. Ja čakacie slučky nepoužívam, namiesto toho si vytvorím časovač s prerušením (hardwarový alebo softwarový). Po vypršaní času si v prerušení obslúžim čo potrebujem. Procesor tak beží neustále naplno a nestráca čas pri čakaní.
0
Niki31
- boraicho
- Ultimate člen
- Príspevky: 12411
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: programovanie v c
Ja všetkemu rozumiem, ale jednoduche kody napriklad aj so spominaným delay použivam, ked niečo potrebujem odladiť.
Vždy zo všetkeho ako prve napišem takýto program, to pišem vždy na začiatku ako kontrolu či su všetky registre nastavene spravne, konfiguračne registre.
led1=1;
_delay_ms(200);
led1=0;
_delay_ms(200);
a ked blika viem že procesor beži a takto odladujem program po častiach až ho nakoniec cely pospajam.
ale to je jedno, iba som sa pýtal či sa da meniť delay za chodu. nie že nechapem čo znamena
"argument must be constant" ako to tu niektorý písali.
-- Spojený príspevok 03 Júl 2020, 19:00 --
mam od misocka správu že
arduino je zložitejšie jak HW tak SW , taku radu si strč do diery....
Vždy zo všetkeho ako prve napišem takýto program, to pišem vždy na začiatku ako kontrolu či su všetky registre nastavene spravne, konfiguračne registre.
led1=1;
_delay_ms(200);
led1=0;
_delay_ms(200);
a ked blika viem že procesor beži a takto odladujem program po častiach až ho nakoniec cely pospajam.
ale to je jedno, iba som sa pýtal či sa da meniť delay za chodu. nie že nechapem čo znamena
"argument must be constant" ako to tu niektorý písali.
-- Spojený príspevok 03 Júl 2020, 19:00 --
mam od misocka správu že
ked chcem niečo meniť? Vždy sa miečo mení , vždy sa meni počas behu programu, vždy sa menia hodnoty na vstupoch,(napetie(potenciometer) logicke vstupy(tlačitka) a vždy sa menia hodnoty na výstupoch (PWM(ledky) DAC(napetie do operaka?)) potreboval som meniť výstupnu frekvenciu, ale podľa teba sa to nedá, tak radšej nepiš nič....Zjavne nema cenu sa s tebou natahovat ked chces nieco menit pocas behu programu a nema to byt premenna! Ako inac to Ty nazyvas?
Inac dal som ti perfektnu radu ked programujes raz za rok, skus arduino, je jednoduhsie.
Nemaš za čo....
arduino je zložitejšie jak HW tak SW , taku radu si strč do diery....
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
- niki31
- Stály člen
- Príspevky: 172
- Dátum registrácie: 05 Feb 2010, 00:00
- Bydlisko: Žilinský kraj
- Vek: 49
Re: programovanie v c
No, na generovanie PWM sú aj lepšie spôsoby. Viacmenej je to tak, že pri kompilácii XC8 vloží napevno makro a viac nieje hodnotu možné meniť. To som si overil. Jediná možnosť je použiť _delay_ms v nejakom cykle.
Na odlaďovanie programu sa niekedy dobre hodí printf funkcia.
Na odlaďovanie programu sa niekedy dobre hodí printf funkcia.
0
Niki31
-
- Ultimate člen
- Príspevky: 2581
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: programovanie v c
Plne súhlasím so správou od misocka. Tu už je asi dobrá rada hádzať hrach o stenu. Pozrel som si arduino delay, akceptuje aj premennú. Takže ak mcu riešite párkrát do roka, a z akýchkoľvek dôvodov nechcete študovať detaily, lepšiu možnosť ako arduino nepoznám.
0
- boraicho
- Ultimate člen
- Príspevky: 12411
- Dátum registrácie: 03 Feb 2007, 00:00
- Bydlisko: Prešov
- Vek: 35
- Kontaktovať používateľa:
Re: programovanie v c
lh, ak bud frajer a menuj! do koho sa navažam? misocko?
pýtal som sa jednoduchu otázku:
ako meniť delay počas chodu.
misocko mi dal radu že sa mam naučiť po anglicky a kupiť arduino.
a pride tretí konkretne TY a sa ho zastáva ako veľmi mi pomohol a si toho nevažim.
Myslíš to vážne?
Zas úplne super že sa nedaju spetne meniť a mazať príspevky.
misočko, ty si mal dobru radu? že sa mam naučiť po anglicky a kupiť arduino? ako to súvisi s danou otázkou?
v arduine neviem napisať program pre zablikanie, už to pochop že som arduino nikdy v ruke nemal. a v Cčku som napisal vyšiše.
V elektronike použivam PIC už 8 rokov, a nemienim to meniť, arduino nema po praktickej stranke u mňa zmysel, človek sa mu musí veľmi prisposobovať. a ja nemam čas na bavkanie sa. Všetko čo robim su veci ktoré sa použivaju nie že si poskladam blikač a potom rozoberiem.
pin a mac obivom vďaka za nápad, určite to použijem. ostatný berte si z nich príklad, bez blbých rečí dali hotovu vec
Téma prečistená od OT a urážok.boraicho-vi udelené napomenutie. 29.7.2020 mirosne
pýtal som sa jednoduchu otázku:
ako meniť delay počas chodu.
misocko mi dal radu že sa mam naučiť po anglicky a kupiť arduino.
a pride tretí konkretne TY a sa ho zastáva ako veľmi mi pomohol a si toho nevažim.
Myslíš to vážne?
Zas úplne super že sa nedaju spetne meniť a mazať príspevky.
misočko, ty si mal dobru radu? že sa mam naučiť po anglicky a kupiť arduino? ako to súvisi s danou otázkou?
v arduine neviem napisať program pre zablikanie, už to pochop že som arduino nikdy v ruke nemal. a v Cčku som napisal vyšiše.
V elektronike použivam PIC už 8 rokov, a nemienim to meniť, arduino nema po praktickej stranke u mňa zmysel, človek sa mu musí veľmi prisposobovať. a ja nemam čas na bavkanie sa. Všetko čo robim su veci ktoré sa použivaju nie že si poskladam blikač a potom rozoberiem.
pin a mac obivom vďaka za nápad, určite to použijem. ostatný berte si z nich príklad, bez blbých rečí dali hotovu vec
Téma prečistená od OT a urážok.boraicho-vi udelené napomenutie. 29.7.2020 mirosne
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS
3D REBEL II + PLA + PETG
CNC 1810 na DPS
Re: programovanie v c
tak mi to po dlhsom case nedalo , mal som chvilu cas , a spomenul som si ze som kedysi kupoval Attiny85. Pre tych co si myslia ze arduino musi byt pouzite ako celok (ten velky plosak, alebo mini plosak, alebo hocico...). Prikladam foto Attiny85 naprogramovanej cez Arduino a k tomu arduino kod ktory je v nej nahraty. Funkcia je cisto pre ukazku jednoduchosti kodu ,jednym potenciometrom sa meni frekvencia blikania (tuto pre jednoduchost od nula do 1023 milisekund), druhym sa meni jas LED (namapovane od 0 - 255) cez PWM samozrejme.
nikomu Arduino nevnucujem, ja osobne by som vsak nikdy ani neskusil programovanie MCU ak by nevynasli arduino alebo nieco podobne, nieje to sice nastroj pre tych co chcu realne programovat , ale pre zaciatok a amaterov ako ja je uplne super. Samozrejme ak chce ist clovek do hlbky , datasheetom sa nevyhne a Arduino ho nezachrani.
mozte tu pls niekto dat kod co bude menit frekvenciu a jas blikania LED v C ? (len pre zaujimavost, porovnanie pochopitelnosti pre zaciatocnikov)
Ďakujem
nikomu Arduino nevnucujem, ja osobne by som vsak nikdy ani neskusil programovanie MCU ak by nevynasli arduino alebo nieco podobne, nieje to sice nastroj pre tych co chcu realne programovat , ale pre zaciatok a amaterov ako ja je uplne super. Samozrejme ak chce ist clovek do hlbky , datasheetom sa nevyhne a Arduino ho nezachrani.
Kód: Vybrať všetko
void setup()
{
pinMode(0,OUTPUT);
}
void loop()
{
int jas = map(analogRead(2), 0, 1023, 0, 255);
int pauza = analogRead(3);
analogWrite(0, jas);
delay(pauza);
analogWrite(0, 0);
delay(pauza);
}
Ďakujem
0
-
- Ultimate člen
- Príspevky: 6217
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: programovanie v c
ty pouzivas attiny, ja mam zase bootloader arduina v atmega8 a atmega328 pouzivam ich na take rychle jednorazovky, ako ovladanie displeja, alebo napr. 5.1 koncak. vyvoj robim na klasickom pro mini.
podobne aj esp8266 - vyvoj je na wemos D1, ktory staci pichnut na usb, ale potom to kompilujem na ciste esp, kde upgrade fw robim cez wifi
podobne aj esp8266 - vyvoj je na wemos D1, ktory staci pichnut na usb, ale potom to kompilujem na ciste esp, kde upgrade fw robim cez wifi
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
Re: programovanie v c
ahojte
"mozte tu pls niekto dat kod co bude menit frekvenciu a jas blikania LED v C ?"
neviem to na nete nikde najst ani v anj a dost by ma to zaujimalo (a nechce sa mi ucit Timery na to aby som to dal sam - este nieje ten spravny cas aby som to potreboval , zatial je arduino vzdy rychlejsie ako potrebujem , prekvapujuco )
"mozte tu pls niekto dat kod co bude menit frekvenciu a jas blikania LED v C ?"
neviem to na nete nikde najst ani v anj a dost by ma to zaujimalo (a nechce sa mi ucit Timery na to aby som to dal sam - este nieje ten spravny cas aby som to potreboval , zatial je arduino vzdy rychlejsie ako potrebujem , prekvapujuco )
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: programovanie v c
Zdá sa že sa nikomu nechce písať program. Ani mne sa nechcelo ale nakoniec som sa donútil, aby som len nekritizoval. Snažil som sa aby sa to čo najviac podobalo na ten arduino kód.
Pre porovnanie arduino kód zaberá 1384 byte (UNO). C kód zaberá 258 byte. Pre srandu králikom som urobil aj asm kód a ten zaberá 120byte. Pri asm jediná veda je napísať jedno milisekundový delay. Ostatné je viac menej rutina ako v C.
Kód: Vybrať všetko
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
void setup(){
DDRD = 0b01000000; //PD6 (OC0A) vystup
PORTD |= 0b01000000;
TCCR0A = (1<<WGM00)|(1<<WGM01)|(1<<COM0A1); //fastPWM, OC0A neinvertujuci vystup PWM
TCCR0B = (1<<CS00)|(1<<CS01); //preddelic 64
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //zapne ADC, preddelic 128
ADMUX = (1<<REFS0); //referencia VCC
}
uint16_t analogRead(uint8_t channel){
ADMUX = (ADMUX & 0b11110000) | (channel & 0b00001111);
ADCSRA |=(1<<ADSC); //start prevodu
while (ADCSRA & (1<<ADSC)); //cakanie na dokoncenie prevodu
return ADC;
}
void variable_delay(uint16_t delay){
while(delay--){
_delay_ms(1);
}
}
int main(void)
{
setup();
while (1) {
OCR0A = analogRead(0)/4;
variable_delay(analogRead(1));
TCCR0A ^=(1<<COM0A1); // odpoji/pripoji PWM
}
}
Kód: Vybrať všetko
.def wl = R24
.def wh = R25
.equ FOSC = 1000000
jmp start
.org INT_VECTORS_SIZE
start: ;nastav periferie
ldi xl,0b0100_0000
out DDRD, xl ;OC0A vystup
out PORTD, xl
ldi xl, (1<<WGM00)|(1<<WGM01)|(1<<COM0A1)
out TCCR0A, xl ;Fast PWM, OC0A nie negovany
ldi xl,(1<<CS00)|(1<<CS01)
out TCCR0B, xl ;preddelic 64
ldi xl,(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)
sts ADCSRA, xl ;zapne ADC, preddelic 128
ldi xl,(1<<REFS0)
sts ADMUX, xl
mainLoop:
ldi wl, 0
rcall analogRead ;zmeraj ADC0 (PC0)
lsr wh ;vydel 4 pomocou dvoch rotacii vpravo
ror wl
lsr wh
ror wl
out OCR0A, wl ;nastav PWM
ldi wl, 1
rcall analogRead ;zmeraj ADC1 (PC1)
rcall variable_delay ;pockaj tolko milisekund
in wl, TCCR0A
subi wl, 0b1000_0000
out TCCR0A, wl
rjmp mainLoop ;chod na zaciatok hlavnej slucky
variable_delay:
sbiw wl, 0
breq variable_delay_end
variable_delay_loop:
rcall delay1ms
sbiw wl, 1
brne variable_delay_loop
variable_delay_end:
ret
analogRead:
andi wl,0b0000_1111
lds wh, ADMUX
andi wh, 0b1111_0000
or wl,wh
sts ADMUX, wl
ldi zl, low (ADCSRA)
ldi zh, high(ADCSRA)
ld wl, z
ori wl, (1<<ADSC)
st z, wl
analogReadWait:
ld wl, z
sbrc wl, ADSC
rjmp analogReadWait
lds wl, ADCL
lds wh, ADCH
ret
delay1ms:
.equ __DELAY_LOOP_TICK__ = 4
.set __DELAY_LOOP_NUM = INT(0.001 * FOSC / __DELAY_LOOP_TICK__)
ldi zl, low (__DELAY_LOOP_NUM)
ldi zh, high(__DELAY_LOOP_NUM)
delay1msLoop:
sbiw zl,1
brne delay1msLoop
ret
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: programovanie v c
tak tu je jasne vidiet preco som nezacal s programovanim MCU kym nevyslo Arduino
pre moje 2-3 nenarocne programi rocne , plne postacuje
pre moje 2-3 nenarocne programi rocne , plne postacuje
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 38 Odpovedí
- 2671 Zobrazení
-
Posledný príspevok od používateľa Lennox