Založen: Nov 15, 2005 Příspěvky: 70 Bydliště: Trutnov
Zaslal: so duben 07 2012, 19:02 Předmět:
Posílám tedy výpis programu. V programování jsem začátečník. Použil jsem nějaké procedury z inetu a konstrukcí s výpisem v asm. Zařízení má měřit napětí článků baterie LiPOL v nabíječce. Vstupní hodnoty jsou napětí článku 1 = U1, napětí článků 1+2 = U12, napětí článku 1+2+3 = U13 (to z důvodu, aby byl jediný potenciál a vyhnul jsem se složitého zapojení či nějakého přepínání či použití odděleného zdroje napájení pro měřák). Napětí článku 2 vypočítávám U12-U1, napětí článku 3 vypočítávám U13-U12(když je záporné zobrazí se nula), napětí baterie vypočítávám: U12-U13, když je výsledek kladný, zobrazí se U12 (U13=0), když je výsledek záporný, zobrazí se U13. Přenos dat z čidla DS18B20 s 16F88 nechodí, s 16F676 a 16F628 to šlo. Pokud budete mít někdo čas na to kouknout, děkuji předem za rady a opravy. Omlouvám se i za strukturu programu, mám to okoukané z jiných projektů, snad se v tom vyznáte.
P_10a_merak pro nabijecku.ASM
Komentář:
Výpis programu pro měření 2C a 3C baterií LiPol v nabíječce.
Založen: Jun 26, 2007 Příspěvky: 464 Bydliště: Vysočina
Zaslal: ne duben 08 2012, 4:44 Předmět:
Zdravím a přeji veselé Velikonoce.
1. na začátku skáčeš do inicializace přes call a nikde se již zpět nevracíš (v zásobníku zůstává jedna návratová adresa) - asi není problém ale nemá to jediné rozumné vysvětlení
2. nemáš definovánu výchozí číselnou soustavu a na jednom řádku máš 200 což mi překladač vyhodil jako chybu. Bylo by vhodné vždy jednoznačně číci, v jaké soustavě dané číslo zapisuješ (0-9 je stejná ale další už ne)
3.v programu čidla ti nesedí časové smyčky, proto ti to asi nefunguje. takže "zkalibruj" smyčky (požadované pauzy x reálné) a pak vyzkoušej.
4. (ne chyba) ale co vyhodnocuješ tím přerušením? Nezkoumal jsem to přesně, myslím, že se může provést právě při komunikaci s čidlem a pokud tam budeš mít nějaký delší kód k přelouskání tak ti to taky může ovlivnit úspěšnost čtení díky "rozhození časování".
Jinak je to dle mého dost nepřehledný. _________________ Žádnej učenej z nebe nespadl ...
chybu mas v nastaveni bank ! v MPLABu dole na liste ti to ukazuje v ktery bance si ...., tak si ji nastav spravne, udelej si hlavni program ze kteryho budes volat ostatni podprogramy pres CALL a na konci bude RETURN spatky do hlavniho, bude to prehlednejsi, jestly pouzivas preruseni a ctes z cidla tak ho zakaz, bude to delat problemy ...., + to co tu bylo uz receno
PIC16F88 má okrem ADCON0 aj ADCON1 ktorý tam nemáš nakonfigurovaný. V podprograme READ_REG zle prepínaš banku. Pred čítaním registru ADRESL prepínaš RP1 namiesto RP0. Program sa potom sekne pri čakaní na vynulovanie bitu GO.
OK Maš pravdu to som si nevšimol. Ale to prepínanie banky platí.
kód:
READ_REG
CALL CEK40
BSF ADCON0,GO ; spuštění A/D převodu
BTFSC ADCON0,GO
GOTO $-1
; ---- oddělení setiny a uloží do ADP_DP ----------------
CLRF ADP_DP ; vynuluje registr ADP_DP
MOVF ADP_DP,0 ; přesune obsah ADP_DP do W
BSF STATUS,RP1
BTFSC ADRESL,0
ADDLW .2 ; když je bit 0=1, přičte dvojku k W
BSF STATUS,RP1
BTFSC ADRESL,1 ; přečte bit 1
ADDLW .5 ; když je bit 1=1, přičte pětku k W
MOVWF ADP_DP ; uloží obsah W do ADP_DP
; ---- oddělení desetiny, jednotky a desítky a uloží do ADP_NM
CLRF ADP_NM ; vynuluje registr ADP_NM
MOVF ADP_NM,0 ; přesune obsah ADP_NM do W
BSF STATUS,RP1
BTFSC ADRESL,2 ; přečte bit 2
ADDLW .1 ; když je bit 2=1, přičte jedničku k W
BTFSC ADRESL,3 ; přečte bit 3
ADDLW .2 ; když je bit 3=1, přičte dvojku k W
BTFSC ADRESL,4 ; přečte bit 4
ADDLW .4 ; když je bit 4=1, přičte čtyřku k W
BTFSC ADRESL,5 ; přečte bit 5
ADDLW .8 ; když je bit 5=1, přičte osmičku k W
BTFSC ADRESL,6 ; přečte bit 6
ADDLW .16 ; když je bit 6=1, přičte šestnáctku k W
BTFSC ADRESL,7 ; přečte bit 7
ADDLW .32 ; když je bit 7=1, přičte třicetdvojku k W
BCF STATUS,RP0
BTFSC ADRESH,0 ; přečte bit 0
ADDLW .64 ; když je bit 0=1, přičte šedesátčtyři k W
BTFSC ADRESH,1 ; přečte bit 1
ADDLW .128 ; když je bit 1=1, přičte stodvacetosm k W
MOVWF ADP_NM ; uloží obsah W do ADP_NM
; ----------
RETURN
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: ne duben 08 2012, 13:16 Předmět:
Nepochopil som funkciu prerušovacieho systému, kvôli čomu je potrebný, a potom načo je dobrý it-od AD.
Chcelo by to napísať ideu merania a vyhodnocovania.
Vo väčšine prípadoch sa dá pracovať aj bez iniciovania isr. V niektorých to inak neide. V takom prípade je to o niečo zložitejšie. A dôležité je to pochopiť.
Činnosť-úlohy programu sa rozdelia na dve časti. Jedna pre hlavný program , druhá v isr. Čo bude ktorá riešiť treba uvážiť.
Štruktúra program/podprogram/isr musí byť exaktne presná. Logické chyby veľakrát neobjaví ani MPLAB, inde vyzýva po preklade na skontrolovanie
Ale to sú základy a to si treba niekde naštudovať.
Ten program po 22. kroku v MPLAB SIM "uletí" inde ako by autor chcel a robí všetko iné len nie to čo bolo cieľom.
Založen: Nov 15, 2005 Příspěvky: 70 Bydliště: Trutnov
Zaslal: ne duben 08 2012, 16:39 Předmět:
Děkuji za připomínky a diskuzi, podívám na to. Abych pravdu řekl, jak procházím jednotlivé procedury abych pochopil jak pracují, tak mi z toho jde hlava kolem a zamotám se v tom, několikrát to opakovaně projíždím. Nakonec si to rozepisuji na papír či do tabulky a ověřuji např. výpočet hodnoty z 8bitového slova. Docela tak potom pochopím pravidla a postup a lépe se orientuji v programu. Je pravda že se to učím a někdy opravdu hledám rady kde se dá. Např. podle serialu v Praktické elektronice či ten kurz myslím z Pandatronu. Kdyby jste ještě něco objevili, prosím o info. Díky moc. Neboli, jak říkala naše matematikářka: Až spočítáte tisíc příkladů, tak vám to pak půjde samo. Takže, hurá do toho.
pokud si ten program trochu zprehlednis tak se v tom pak uz nestratis, nejlepsi je zacit od zacatku, nastavit si pojistky rozsvitit ledku, vis ze procesor bezi.., pak pridas zobrazeni na LCD jenom text "ahoj" treba, LCD bezi ..., pak zobrazeni promene kterou treba po 500ms menis, tim si overis ze prevod HEX na ASCII funguje + ta promena, a nakonec tam muzes pridat ten A/D, timhle zpusobes se taky muzes samozrejme zaseknout ale tim ze to delas postupne vis kde pak hledat problem..... nez kdyz poskladas kompletni kod a nejde
Založen: Nov 15, 2005 Příspěvky: 70 Bydliště: Trutnov
Zaslal: po duben 09 2012, 21:58 Předmět:
Máte, prosím, nějaký popis, či odkaz na rady pro začátečníky, jak správně psát program? Jak řadit chronologicky části programu, tj. inicializace, difinice vstupů a výstupů, proměnné, hlavní smyčka, podprogramy, definice znaků, řazení znaků pro zobrazovače LCD řádek po řádku, časové články a pod? Jistě jsem nevyčerpal všechny možnosti. Díky za info.
Založen: Jun 26, 2007 Příspěvky: 464 Bydliště: Vysočina
Zaslal: út duben 10 2012, 4:00 Předmět:
Takový první návrh: papír, tužka a nakresli si blokové schéma programu. Dle toho pak začni dělat bloky vlastního programu, které spojíš programem nadřazeným. Já osobně to dělám tak (netvrdím, že zcela správně), že mám hlavní smyčku programu a z ní skáču do podprogramů. Dále mám u více stránkových PICů zažité:
stránka 0 - přerušení, hlavní smyčka programu, funkční podprogramy
stránka 1 - menu
stránka 2 - LCD (init, obslužná rutina a texty)
stránka 3 - komunikace s okolím (čidla apod.), dále zobrazení alarmů
Už to mám tak vžité a vyhovuje mi to. _________________ Žádnej učenej z nebe nespadl ...
Založen: Nov 15, 2005 Příspěvky: 70 Bydliště: Trutnov
Zaslal: út duben 10 2012, 20:58 Předmět:
Tak jsem předělal program, opravil chybičky. Nejdříve mám proměnné, pak definice, pak postupně za sebou všechny inicializace, pak úvodní hlášení na displeji zobrazující se po zapnutí a pak je smyčka, v jakém pořadí podprogramy volám, v takovém pořadí jsou za sebou, pokud má podprogram svuj další podprogram, je pod ním, úplně na konci mám časové články, zpoždění, pauzy a pod. Už to vše funguje, měří i teplota. Ani to nedalo moc práce. Díky všem za podporu.
Založen: Nov 15, 2005 Příspěvky: 70 Bydliště: Trutnov
Zaslal: ne listopad 11 2012, 13:14 Předmět:
Ahoj všichhni, nemáte, prosím, zkušenost s tím, když máte jako zdroj hodinového signálu externí krystal, jak na stavit parametry pro AD převodník? S interním oscilátorem to měří, s externím krystalem ne.
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2, 3, 4Další
Strana 2 z 4
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.