programovanie v c

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: programovanie v c

Príspevok od používateľa boraicho » 01 Júl 2020, 19:57

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

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

Re: programovanie v c

Príspevok od používateľa Atlan » 01 Júl 2020, 20:24

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)
0

pin
Power user
Power user
Príspevky: 2370
Dátum registrácie: 09 Máj 2009, 00:00

Re: programovanie v c

Príspevok od používateľa pin » 01 Júl 2020, 21:21

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);
}
0

Používateľov profilový obrázok
mac26
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1298
Dátum registrácie: 01 Feb 2010, 00:00
Bydlisko: Martin

Re: programovanie v c

Príspevok od používateľa mac26 » 01 Júl 2020, 21:35

Kód: Vybrať všetko

void cakaj(uint16_t cas){
    while(cas--)
        __delay_ms(1);
}
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: programovanie v c

Príspevok od používateľa misocko » 01 Júl 2020, 21:36

boraicho napísal:AD-LCD.c:279: error: (1387) inline delay argument must be constant
z povahy tvojej otazky vypliva ze programovanim sa zivit nebudes :D (ked uz nie programovanie , tak bez zakladov anglictiny sa tu nezaobides)
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

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: programovanie v c

Príspevok od používateľa boraicho » 02 Júl 2020, 16:12

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

Používateľov profilový obrázok
niki31
Stály člen
Stály člen
Príspevky: 172
Dátum registrácie: 05 Feb 2010, 00:00
Bydlisko: Žilinský kraj
Vek: 49

Re: programovanie v c

Príspevok od používateľa niki31 » 03 Júl 2020, 12:25

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.
0
Niki31

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: programovanie v c

Príspevok od používateľa misocko » 03 Júl 2020, 13:34

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.
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: programovanie v c

Príspevok od používateľa boraicho » 03 Júl 2020, 16:18

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á?
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

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2564
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: programovanie v c

Príspevok od používateľa maskrtnik01 » 03 Júl 2020, 16:23

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.
0

Používateľov profilový obrázok
niki31
Stály člen
Stály člen
Príspevky: 172
Dátum registrácie: 05 Feb 2010, 00:00
Bydlisko: Žilinský kraj
Vek: 49

Re: programovanie v c

Príspevok od používateľa niki31 » 03 Júl 2020, 18:57

Ú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í.
0
Niki31

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: programovanie v c

Príspevok od používateľa boraicho » 03 Júl 2020, 19:54

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 :D 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
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....
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č....

arduino je zložitejšie jak HW tak SW , taku radu si strč do diery.... :butthead:
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

Používateľov profilový obrázok
niki31
Stály člen
Stály člen
Príspevky: 172
Dátum registrácie: 05 Feb 2010, 00:00
Bydlisko: Žilinský kraj
Vek: 49

Re: programovanie v c

Príspevok od používateľa niki31 » 03 Júl 2020, 21:35

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.
0
Niki31

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2564
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: programovanie v c

Príspevok od používateľa maskrtnik01 » 03 Júl 2020, 22:10

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

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: programovanie v c

Príspevok od používateľa boraicho » 04 Júl 2020, 12:17

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 :potlesk:


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

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: programovanie v c

Príspevok od používateľa misocko » 19 Aug 2020, 21:08

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.

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);
}
mozte tu pls niekto dat kod co bude menit frekvenciu a jas blikania LED v C ? (len pre zaujimavost, porovnanie pochopitelnosti pre zaciatocnikov)
Ďakujem
Prílohy
Attiny85_arduino.jpg
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6203
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: programovanie v c

Príspevok od používateľa pocitujlasku » 19 Aug 2020, 21:29

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
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: programovanie v c

Príspevok od používateľa misocko » 01 Sep 2020, 23:28

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 :D )
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 03 Sep 2020, 21:12

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.

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
	}
}

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

.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í.

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: programovanie v c

Príspevok od používateľa misocko » 03 Sep 2020, 22:18

tak tu je jasne vidiet preco som nezacal s programovanim MCU kym nevyslo Arduino :D
pre moje 2-3 nenarocne programi rocne , plne postacuje
0

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