programovanie v c

C,C++,C#

Moderátori: psichac, Moderátori

JohnnyElektro
Stály člen
Stály člen
Príspevky: 386
Dátum registrácie: 16 Júl 2019, 14:22

Re: programovanie v c

Príspevok od používateľa JohnnyElektro » 28 Dec 2019, 19:43

Aky error ti vyhadzuje? Mne sa celkovo nepaci co tvoj program robi musim sa priznat.
0

slonik
Okoloidúci
Okoloidúci
Príspevky: 39
Dátum registrácie: 19 Dec 2019, 22:01
Bydlisko: Žilina

Re: programovanie v c

Príspevok od používateľa slonik » 28 Dec 2019, 19:50

error som písal v prvom príspevku .... no chcem rozblikať led pomocou prerušenia na čo používam časovač TIMER1
led mám pripojenú na PORTE a v prerušení mi ju zapne.... v hlavnom programe mi ju vypne.....časovač mám pomocou predeličky a registrov TMR1H a TMR1L nastavený na 100ms ..... ako hovorím začínam programovať v C .......zrejme by to mala byť banalita ale jednoducho mi to nejde rozchodiť
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 » 28 Dec 2019, 19:55

Johnny ta zaváza na nesprávnu cestu. Z výpisu je jasne vidieť že program je syntakticky správne lebo kompilácia zbehne. Skape to až ďalej, pravdepodobne na linkovaní. problém by mohol byť tu

Kód: Vybrať všetko

void interrupt timer_1()
Pravdepodobne kompiler nevie určiť čo za prerušenie máš na mysli. Neprogramujem PIC tak chvilu budem googlit než to nájdem
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

slonik
Okoloidúci
Okoloidúci
Príspevky: 39
Dátum registrácie: 19 Dec 2019, 22:01
Bydlisko: Žilina

Re: programovanie v c

Príspevok od používateľa slonik » 28 Dec 2019, 19:59

doklikal som sa sem ..... bude niekde chyba tak ako vravíš ... akurát som zmeni napis timer_1 na prerusenie .... skúšam čo môžem
Prílohy
Snímka.PNG
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2562
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 » 28 Dec 2019, 20:01

JohnyElektro:

Bežne píšem programy, ktorých main končí nekonečnou slučkou. Čo myslíte ako v arduine vyzerá main?
Zjednodušene proste raz setup, potom donekonečna loop.
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 » 28 Dec 2019, 20:03

Takže meno môže byť lubovolné lebo prerušovacia rutina je na tomto type len jedna.

len tak strelím nechýba ti tam nahodou toto?

Kód: Vybrať všetko

#include <pic.h>
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

slonik
Okoloidúci
Okoloidúci
Príspevky: 39
Dátum registrácie: 19 Dec 2019, 22:01
Bydlisko: Žilina

Re: programovanie v c

Príspevok od používateľa slonik » 28 Dec 2019, 20:06

skúsil som doplniť ale bez výsledku ... resp. môže byť že mi tá knižnica chýba niekde priamo v počítači? ..
Prílohy
Snímka2.PNG
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 » 28 Dec 2019, 20:11

No teraz som zase zaviedol ja teba. Ono ten PIC má niekoľko rozdielnych kompilátorov. Ty používaš ten čo sa tuším označuje ako XC8. A tam tie include sú inak. Teda ten moj pic je tam ak nie zle tak minimálne zbytočný. Môžeš poriadne skopírovať tú chybu? Z toho printscreenu to celé nie je vidno. A rovno si ho praskni do googla a možno nájdeš aj odpoveď čo máš zle.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

slonik
Okoloidúci
Okoloidúci
Príspevky: 39
Dátum registrácie: 19 Dec 2019, 22:01
Bydlisko: Žilina

Re: programovanie v c

Príspevok od používateľa slonik » 28 Dec 2019, 20:16

Kód: Vybrať všetko

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'E:/MOJA ELEKTROTECHNIKA/PIC_Cblink_PIC16F887/blink.X'
make  -f nbproject/Makefile-default.mk dist/default/production/blink.X.production.hex
make[2]: Entering directory 'E:MOJA ELEKTROTECHNIKA/PIC_C/blink_PIC16F887/blink.X'
"C:\Program Files (x86)\Microchip\xc8\v2.10\bin\xc8-cc.exe"  -mcpu=16F887 -c    -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default  -msummary=-psect,-class,+mem,-hex,-file  -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall   -std=c99 -gdwarf-3 -mstack=compiled:auto:auto     -o build/default/production/blink_interupt.p1 blink_interupt.c 
::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries
blink_interupt.c:27:7: error: variable has incomplete type 'void'
 void interrupt prerusenie()
      ^
blink_interupt.c:27:16: error: expected ';' after top level declarator
 void interrupt prerusenie()
               ^
               ;
2 errors generated.
make[2]: *** [build/default/production/blink_interupt.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
(908) exit status = 1
nbproject/Makefile-default.mk:108: recipe for target 'build/default/production/blink_interupt.p1' failed
make[2]: Leaving directory 'E:/JARO/MOJA ELEKTROTECHNIKA/ASSAMBLER - PIC/PIC_C/PIC_C_projekty/blink_PIC16F887/blink.X'
nbproject/Makefile-default.mk:91: recipe for target '.build-conf' failed
make[1]: Leaving directory 'E:/JARO/MOJA ELEKTROTECHNIKA/ASSAMBLER - PIC/PIC_C/PIC_C_projekty/blink_PIC16F887/blink.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed

BUILD FAILED (exit value 2, total time: 456ms)

toto mi tam vypíše

-- Spojený príspevok 28 Dec 2019, 21:26 --

ideeeeee mi toooo :applause: :applause: :applause: :applause:

vyňural som na googli podobnú tému na anglických stránkach ...
miesto void interrupt () som napísal __interrupt() void MY_ISR(void) a už to ide

-- Spojený príspevok 28 Dec 2019, 21:27 --

nejak takto
Prílohy
Snímka3.PNG
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 » 28 Dec 2019, 20:40

no nejaké mi to príde čudné to tvoje riešenie. Aj to robí to prerušenie? Toto by nestačilo

Kód: Vybrať všetko

void interrupt   prerusenie  (void)
{ 
Kedže kompiler kecal že mu chýba void.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

slonik
Okoloidúci
Okoloidúci
Príspevky: 39
Dátum registrácie: 19 Dec 2019, 22:01
Bydlisko: Žilina

Re: programovanie v c

Príspevok od používateľa slonik » 28 Dec 2019, 21:10

no program nahralo ale led mi len svieti nebliká ... ako keby mi nechcelo vôjsť do prerušenia .... ale idem si ešte skontrolovať
nastavenie prerušenia či ho mám fakt v poriadku.
void interrupt prerusenie (void) som vyskúšal ale nefunguje mi ....
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 » 28 Dec 2019, 21:16

Tvoj program ale s LED blikať nebude. Teda bude ale tak že to nemáš šancu vidieť. Veď si uvedom čo sa stane keď sa vrátiš z prerušenia. Okamžite zase hlavný program ledku zapne. Ak to teda cez to prerušenie vôbec zbehne. Aj to by patrilo overiť.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

slonik
Okoloidúci
Okoloidúci
Príspevky: 39
Dátum registrácie: 19 Dec 2019, 22:01
Bydlisko: Žilina

Re: programovanie v c

Príspevok od používateľa slonik » 28 Dec 2019, 22:25

jasné rozumiem .... v hlavnom programe mi ju zapne počká napríklad 500ms vôjde do prerušenia kde mi ju vypne a hneď zapne takže blikanie po pol sekunde neuvidím ..... musel by som dať k vypnutiu ešte delay(500) ... ale už mi to ide som rád že som to rozchodil.....mne šlo hlavne o to aby som to rozchodil kvôli multiplexu na 7segmente a blikanie led bolo len spôsob overenia fungovania prerušenia......ešte raz ti ďakujem .... neuvedomil by som si kde je chyba a hľadal by som ju asi kým by poľnicou netrúbili súdny deň...
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 » 28 Dec 2019, 22:35

Niesom bohvie aky programator, ale vlož si na začiatok programu toto skopiruj to tam

Kód: Vybrať všetko

#define FOSC 1000000

#define _delay_us(x) { unsigned char us; \
us = (x)/(13000000/FOSC)|1; \
while(--us != 0) continue; }

void _delay_ms(unsigned int ms)
{
unsigned char i;
do {
i = 4;
do {
_delay_us(99);
} while(--i);
} while(--ms);
}

FOSC si daj taky na akej frekvencii ti beži procesor. potom v hlavnej slučke (while1) si napiš takyto kratky program

namiesto "led" si daj port na ktorom maš pripojenu ledku napriklad RA1 a ked to skompiluješ a nahraš tak ti bude blikať.

while(1)
{ led=1;
_delay_ms(500);
led=0;
_delay_ms(500);
}
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
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 » 28 Dec 2019, 23:16

@boraicho: XC8 ma vstavany delay, staci mat definovany "_XTAL_FREQ"

Kód: Vybrať všetko

__delay_ms()

Lepsie by bolo, keby v preruseni namiesto zasvecovania LEDky menil jej stav.
napr:

Kód: Vybrať všetko

void __interrupt() myisr(void){
  if(TMR1IF){
    RE0 = !RE0;
    TMR1IF = 0;
    }
  }
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 » 28 Dec 2019, 23:48

On chcel blikaním led iba overiť či mu funguje kód ohľadom prerušenia. Len si nabehol na to že zabudol čo robí v tej nekonečnej slučke. To sa najjednoduchšie dalo ak by hlavný program končil napr.

Kód: Vybrať všetko

PORTE=0b00000000;//RE0=0;     
while(1){ 
}
Led by sa zapla a prerušenie by ju zhaslo. Takže ak by to nefungovalo zostala by svietiť.
Ale to blikanie pomocou zmeny hodnoty čo navrhol mac je samozrejme najlepšie. 5Hz by sa dalo vidno už aj okom. Navyše by to overilo aj správnosť toho časovania.

boraicho:
Ten tvoj program je pekná alchýmia. Počítanie mikrosekund cez textové makro (define). To teda dobre zamotá hlavu začiatočníkovi. Potom počítanie ms cez funkciu. A čo tie hauzlumerá? Prečo 13000000? Prečo sa 1ms urobí tak že sa štyri krát urobí 99μs. Podľa mňa takto postavený delay je hodne závislý od toho akým kompilátorm sa skompiluje a tiež od jeho nastavenia. Lebo ak budú zapnuté optimalizácie tak ten prázdny while môže prekladač úplne vyhodiť. A je po oneskorení.
Keď už delay tak potom ten z knižnice a nie takéto čudo čo na každý procesor, kompilátor, nastavenie dá iné oneskorenie.
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
feros
Stály člen
Stály člen
Príspevky: 414
Dátum registrácie: 23 Sep 2010, 00:00
Bydlisko: okres Nitra

Re: programovanie v c

Príspevok od používateľa feros » 29 Dec 2019, 11:16

Inak XC8 prešlo na štandard ANSIC 99 ktorý je prísnejší než predchádzajúca verzia, príklady na internete sú potom napísané v rôznych verziách a často majú nepochopitelné problémy keď ich použijete priamo bez prepísania.
V MPLAB X je dobrý doplnok MCC Code Configurator ktorý vytvori .c a .h súbory pre periférie mcu, kde sa dajú nastaviť parametre periférii, ale aj je vidieť aký je požadovaný spôsob zápisu pre prerušenia a ovládania periférii, nevýhoda je že ten doplnok vyrába Microchip a presadzuje tam hlavne použivanie nových mcu , nie 16c628 ale bo 16f84 , čo je na druhú stranu aj dobre lebo nové mcu sú vybavené oveľa lepšie ako staré.
0

slonik
Okoloidúci
Okoloidúci
Príspevky: 39
Dátum registrácie: 19 Dec 2019, 22:01
Bydlisko: Žilina

Re: programovanie v c

Príspevok od používateľa slonik » 29 Dec 2019, 11:48

no ...... mne sa začína zdať že starý dobrý assembler ešte nik nepreštal
:D
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 » 29 Dec 2019, 17:27

Peterple ja vobec netušim, raz dávno, ked som začinal, som samozrejme chcel blikať, a na blikanie som potreboval delay, prve čo mi na google našli mi aj fungovalo, tak som to za tých už 8 rokov neriešil. Ja sám tomu programu nechápem. ale funguje a funguje zatiaľ na každom procaku čo som použil, cez 10 ich už bolo :)
a aby som upresnil, presny nieje, plus minus nejake desatiny mS, ale da sa to odladiť ak treba, treba len osciloskop.
ak maš nejaky jednoduchši || lepší delay, sem s nim :)
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

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

Re: programovanie v c

Príspevok od používateľa pocitujlasku » 29 Dec 2019, 20:05

slonik: ano, asm je super ak potrebujes mat presne casovanie a mat kazdy bit pod kontrolou. ale uprimne, neviem si v nom predstavit riesit napr. tcp stack, alebo nieco velke.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

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