já mám dotaz ohledně časových smyček - asm jsem si to řešil tak že v přerušení generuji hodinový interval a prostý čítač a nastavím příznak - takto mohu generovat několik časových značek na které reaguje hlavní program - ten neustále monitoruje vstupy atd. a také příznaky . v c napíší časovou smyčku a celéý procesor nic nedělá jen časuje ? musím opět vytvořit časovače do přerušení jako v asm nebo je na toto jiná finta pro c
Tady se práce v C a ASM ničím neliší. Buď vyrobíš sw blokující smyčku (= použití nějaké delay() funkce), nebo využiješ timery. Informace mezi synchronní (main a z něj volané funkce) a asynchronní (přerušení) částí programu se předává globální proměnnou (s “volatile” před definicí).
Ja viem, že je toho zdanlivo na prvý krát veľa. Ale ruku na srdce, tých 35 inštrukcií PICu sa tiež človek nenaučí za týžden. Len si skúste spomenúť na tie počiatočné týždne a mesiace skúmania, bádania a overovania. Ja si na ten čas strávený pri 16F84 tiež dobre pamätám.
Uznávam, že môžem mať skreslený pohľad na vec a preto by som Ťa chcel Vlasta poprosiť, mohol by si sem heslovite napísať čo si sa za tú dobu musel naučiť? Len tak pre porovnanie s tými 35 inštrukciami PICu.
Pozor, toto nie je U=(Uref/10)…
Ahoj Martine,
máš samozřejmě pravdu …
Já jsem navíc už někdy v 80 - letech min. století trošku zkoušel stroják u I-8080, I-8085, později (u ZX Spectrum) Z-80, takže assembler mám vcelku zažitý už řadu let.
Můj problém je v tom, že kromě Basiku v ZX Spectru (který byl navíc trošku atypický) jsem nikdy v žádném vyšším jazyce nedělal, takže pro mne znamená největší potíž onen odlišný pohled na celou problematiku.
Navíc já už jsem trošku staršího vydání (letos mi bylo 61 let) a hlava už mi to občas příliš nebere, problém je třeba už jen v tom, zapamatovat si to množství nejrůznějších operátorů a způsobů zápisu všeho možného …
Další problém je v tom, že zjišťuji, že kousek programu se dá zapsat na několik řádků - přehledně, ale neúsporně, ale taky na dva nebo dokonce jeden řádek (pomocí nějakého šíleného systému závorek , tedy sice úsporněji, ale pro mne složitěji a méně přehledně.
Prohlížím si různé programy z internetu od různých lidí a stále narážím na další a další věci, které nechápu (mnohdy je to jen o způsobu zápisu) a prostě to jde mnohem pomaleji, než jsem si představoval.
Ale abych Ti odpověděl:
Začal jsem tím, že jsem si vyzkoušel nejprve všechny příkazy pro cykly, napsal, odzkoušel, uložil. Pak operace se vstupy a výstupy (na “bastl-desce”), to taky nebyl problém, rozblikat nějakou LEDku.
Pak jsem chtěl vyzkoušet maticovou klávesnici a LCD displej a tady jsem se trošku zablokoval …
Sám si napsat program pro obsluhu LCD displeje a klávesnice zatím neumím a “lámání” cizích programů zatím hodně bolí .
Navíc jsem to potřeboval do jednoho zařízení do školy, které jsem potřeboval poměrně rychle dodělat - proto jsem se dal na C, protože jsem si bláhově myslel, že to bude pro mne rychlejší a jednodušší řešení.
Ale nějak to půjde, docela mne to baví, takže snad to nějak zvládnu
Vlasťa
To taky nikdo netvrdí, ostatně je tam komentář . Je to přibližné dělení 1024 (počtem kvantizačních úrovní převodníku) - chybí tam ještě přičtení 1 na posledním vysunutém bitu, ale to nebude tragédie. Výsledek bude místo zaokrouhleného jen oříznutý.
Doplnění pro misa:
unsigned long int (32bit) je tam proto, aby se vešel výpočet. Maximální hodnota z převodníku(10b) je 1023. Max. hodnota Vref v mV = 5000. 1023*5000 = 5.1e6 => minimálně 23bit.
napětí = ADRES * Vref / ADbits;
Při celočíselném výpočtu je nutné dodržet i pořadí operací jak byly v kódu za sebou.
Miso:
Před časem jsi se ptal na ovládání jednotlivých bitů v C.
Našel jsem náhodou tento článek, je tam i ovládání jednotlivých bitů:
fcet.staffs.ac.uk/sow1/pic_c … ation_bits
Snad je to to, co jsi hledal.
Zdraví
Vlasťa
Miso:
A ještě jsem našel toto:
Any of the following statements can be written to use the PORTA special function
register:
PORTA = 0x34; /* Assigns the value 0x34 to the port /
PORTAbits.AN0 = 1; / Sets the AN0 pin high /
PORTAbits.RA0 = 1; / Sets the RA0 pin high, same as above
statement */
Je to z manuálu C-18 Compileru.,
Vl.
Dobrý večer,
mám problém v MPLAB 8.0 s tuto chybovou hláškou:
Debug build of project G:\C - PIC\C18\Testy\LEDS_1\LEDS_1.mcp' started. Language tool versions: MPASMWIN.exe v5.42, mcc18.exe v3.40, mplib.exe v4.40 Preprocessor symbol
__DEBUG’ is defined.
Sun Nov 27 18:50:55 2011
Make: The target “G:\C - PIC\C18\Testy\LEDS_1\LEDS_1.o” is out of date.
Executing: “C:\Program Files\Microchip\mplabc18\v3.40\bin\mcc18.exe” -p=18F4550 “LEDS_1.c” -fo=“LEDS_1.o” -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
Make: The target “G:\C - PIC\C18\Testy\LEDS_1\LEDS_1.cof” is out of date.
Executing: “C:\Program Files\Microchip\mplabc18\v3.40\bin_mplink.exe” /l"C:\Program Files\Microchip\mplabc18\v3.40\lib" “LEDS_1.o” /z__MPLAB_BUILD=1 /z__MPLAB_DEBUG=1 /o"LEDS_1.cof" /M"LEDS_1.map" /W
MPLINK 4.40, Linker
Device Database Version 1.3
Copyright © 1998-2011 Microchip Technology Inc.
Error - Device not specified. Use /p option to specify a device.
Errors : 1
Link step failed.
Debug build of project G:\C - PIC\C18\Testy\LEDS_1\LEDS_1.mcp' failed. Language tool versions: MPASMWIN.exe v5.42, mcc18.exe v3.40, mplib.exe v4.40 Preprocessor symbol
__DEBUG’ is defined.
Sun Nov 27 18:50:56 2011
BUILD FAILED
V programu mám napsáno pouze toto:
#include <p18F4550.h>
#include <stdio.h>
#pragma config WDT = OFF
#pragma config FOSC=INTOSC_EC
#pragma config PWRT=OFF
#pragma config BOR=OFF
#pragma config MCLRE=ON
#pragma config PBADEN=OFF
#pragma config ICPRT=OFF
#pragma config LVP=OFF
#pragma config DEBUG=OFF
void main (void)
{
}
Přitom typ mikrořadiče mám nastaven správně (viz výpis, navíc zkontrolováno v MPLABu v okně Configure/Select Devices).
Používám compiler C-18.
Co s tím, prosím vás?
Díky za radu
Vl.
#include <p18F4550.h> nema tam byt #include <p18f4550.h> hm tak ze nie tym to nebude… mne to na 3.36 fachci zasa mi nejde update na 3.40
Ne, zkusil jsem to, neni to tim.
Stále stejná chyba.
Vl.
Ještě doplním:
Ve škole používáme ve výuce “puky” Microchip ICD-2, spolu v vlastními zkušebními deskami s PIC16F883. Programujeme v assembleru.
Čas od času nám to u některého z nich vypíše stejnou hlášku a nikdy se nám to nepodařilo rozchodit. Vždy to vzdáme, vypneme a ono se to příště třeba neobjeví (nebo se to objeví jinde).
V helpu je u této hlášky jen obecná informace typu zkontrolovat napájení desky, kabeláž, připojení k PC atd., což samozřejmě uděláme a nikdy to zatím nepomohlo.
Teď ale sedím doma, k PC nemám připojené vůbec nic, jsem v simulačním režimu a vypisuje mi tu opět tuto hlášku.
Nenapadá vás někoho, co myslí tím “Use /p option to specify a device”?
Jako by se to dalo někde zadat z příkazového řádku, ale jak?
A navíc, znovu opakuji, typ PICky je nastaven správně.
Zkusil jsem už i zrušit řádek “#include <p18f4550.h>”, protože MPLAB si zřejmě převezme typ PIC z nastavení v okně “Configure/Select Devices”, kde je to nastaveno správně. Ani to nepomohlo.
Zkontroloval jsem i v MPLABu nastavení cest k compileru C-18 - vše je v pořádku.
Už fakt nevím, co s tím, asi s tím šlehnu z okna … .
Vl.
Tak jsem na to po několika hodinách marné snahy asi přišel …
Je to problém v nastavení cesty k linkeru.
V cestě “C:\Program Files\Microchip\mplabc18\v3.40\bin\mplink.exe” - tedy ve složce …\bin jsou dva soubory: _mplink.exe a mplink.exe.
Já jsem tam měl ten s podtržítkem (jak by ne, když se objeví hned nahoře .
Správný je ten bez podtržítka.
Vl.
Zdravim Vas,
chtel jsem se zeptat, jaky prekladac pouzivate pro psani programu (Pluginy) na PICy v MPLABu? Vim, ze existuji asi 3 verze, ale jen jedna je FREE (HICH-TECH C-LITE). Aspon co jsem vycetl, ale monase pletu.