programovanie v c
Moderátori: psichac, Moderátori
-
- Stály člen
- Príspevky: 386
- Dátum registrácie: 16 Júl 2019, 14:22
Re: programovanie v c
Aky error ti vyhadzuje? Mne sa celkovo nepaci co tvoj program robi musim sa priznat.
0
Re: programovanie v c
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ť
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
-
- 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
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
Pravdepodobne kompiler nevie určiť čo za prerušenie máš na mysli. Neprogramujem PIC tak chvilu budem googlit než to nájdem
Kód: Vybrať všetko
void interrupt timer_1()
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: programovanie v c
doklikal som sa sem ..... bude niekde chyba tak ako vravíš ... akurát som zmeni napis timer_1 na prerusenie .... skúšam čo môžem
0
-
- Ultimate člen
- Príspevky: 2564
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: programovanie v c
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.
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
-
- 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
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?
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í.
Re: programovanie v c
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? ..
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
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í.
Re: programovanie v c
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
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
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
no nejaké mi to príde čudné to tvoje riešenie. Aj to robí to prerušenie? Toto by nestačilo
Kedže kompiler kecal že mu chýba void.
Kód: Vybrať všetko
void interrupt prerusenie (void)
{
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: programovanie v c
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 ....
nastavenie prerušenia či ho mám fakt v poriadku.
void interrupt prerusenie (void) som vyskúšal ale nefunguje mi ....
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
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í.
Re: programovanie v c
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
- boraicho
- 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
Niesom bohvie aky programator, ale vlož si na začiatok programu toto skopiruj to tam
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);
}
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
3D REBEL II + PLA + PETG
CNC 1810 na DPS
Re: programovanie v c
@boraicho: XC8 ma vstavany delay, staci mat definovany "_XTAL_FREQ"
Lepsie by bolo, keby v preruseni namiesto zasvecovania LEDky menil jej stav.
napr:
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
-
- 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
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.
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.
Kód: Vybrať všetko
PORTE=0b00000000;//RE0=0;
while(1){
}
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í.
Re: programovanie v c
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é.
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
- boraicho
- 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
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
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
3D REBEL II + PLA + PETG
CNC 1810 na DPS
-
- Ultimate člen
- Príspevky: 6203
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: programovanie v c
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.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 38 Odpovedí
- 2379 Zobrazení
-
Posledný príspevok od používateľa Lennox