Zdravím, potřeboval bych pomoct s programem do školy. Program je téměř hotový, stačí najít chybu, kterou se mi po delším bádání, nepodařilo najít.
Zadání: Vytvořte program, který bude počítat počet zapnutí napájecího napětí pro vývojovou desku s jednočipovým mikropočítačem PIC16F88. Počet zapnutí bude uložen v BCD kódu na adrese 10H v paměti EEPROM. Po uložení nové hodnoty se rozsvítí desetinná tečka na zobrazovači. Po stisknutí tlačítka TL1 se na 1 sekundu zobrazí na sedmisegmentovém zobrazovači jednotky počtu zapnutí napájení.
V příloze najdete zjednodušené schéma, vývojové diagramy a samotný program. Budu vám velice vděčný a mé vysvědčení taktéž za jakoukoliv pomoc či připomínku. Děkuji.
Založen: Oct 06, 2005 Příspěvky: 87 Bydliště: Tábor
Zaslal: čt leden 02 2014, 20:17 Předmět:
a jak se ti to chová teď ??
nevim proč máš na konci programu znovu inicializaci když chceš jen hasnout displej, dej tam jen clrf porta a pak rozsvit tečku,,,, no a nevim k čemu je ta inkrementace eedata v podprogramu cteni když tu inkrementaci provádíš po vyskočení z tabulky? to sou dvě věci kerý zatim vidim. až dorazim dom, pustim mplab a uvidim snad víc.
a jen tak okrajově,, nejsi ty z COPky ??? mi ten zdroják je nějakej povědomej
Oprava: nedávej tam clrf porta ale setf porta ( teda jestli 16f88 zná instrukci setf )
Naposledy upravil Pawalo dne čt leden 02 2014, 20:20, celkově upraveno 1 krát.
Pozrel som to len tak zbežne a prve čo vidím je,že po zapnutí sa v definíciach nuluje eeprom.Ťažko ti preto bude zobrazovať predtým zapísané data.
Inak tie časové slučky sa už asi nedali napísať zložitejšie,o neustálom volaní INIT ani nahovorím.Je to zbytočné plýtvanie prostriedkami mikrokontroléra.Tento program sa dá napísať aj 2x kratší.
Založen: Jun 14, 2003 Příspěvky: 2794 Bydliště: Blížejov
Zaslal: čt leden 02 2014, 20:46 Předmět:
Niki31 napsal(a):
Pozrel som to len tak zbežne a prve čo vidím je,že po zapnutí sa v definíciach nuluje eeprom.Ťažko ti preto bude zobrazovať predtým zapísané data.
...
Ono by to chtělo vybrat nějakou nevyužitou adresu v EEPROM, přečíst co je tam a podle toho, jestli tam bude nastavená hodnota nebo ne, rozhodnout se, jestli provést nulování EEPROM a pak tu hodnotu na zmíněnou adresu uložit.
Tím by po příštím zapnutí přístroj poznal, že již je nastaven a nulování by se přeskočilo.
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: čt leden 02 2014, 23:43 Předmět:
To nulovanie EEPROM na adrese0x2110 je O.K.
To sa definuje iba do hex súboru pri napaľovaní procesora aby začal žiť od stavu NULA.
Clrf portA je dobrá instrikcia, lepšej niet, iba zložitejšie cez w register.
To vynulovanie je OK,nevedel som že 16f88 ma takú kratučkú pamäť,
že adresa 2110 zasahuje už do EEPROM.
Pawalo myslel SETF PORTA kvôli tomu že display sa zhasína nastavením všetkých bitov portu A na Log.1. Tak by to bolo najjednoduchšie,lenže túto inštrukciu tento mikrokontrolér nepozná.
Riadok 258 treba odstrániť,pretože počet je inkrementovaný 2 krát.
Ďalej nieje ošetrené väčšie číslo ako 9 v rutine tabulka.Inštrukcia return
na konci je nanič,ak bude číslo > 10 tak sa aj tak preskočí a program skolabuje. Pred volaním rutiny tabulka treba zabezpečiť že číslo bude iba v rozsahu 0-9.
Lepšie ošetriť zakmitavanie tlačítka,určite by som doplnil sekciu "je stále stlačené?" a "je uvolnené tlačítko?" by som dal na začiatok.
nevim proč máš na konci programu znovu inicializaci když chceš jen hasnout displej, dej tam jen clrf porta a pak rozsvit tečku,,,, no a nevim k čemu je ta inkrementace eedata v podprogramu cteni když tu inkrementaci provádíš po vyskočení z tabulky? to sou dvě věci kerý zatim vidim. až dorazim dom, pustim mplab a uvidim snad víc.
a jen tak okrajově,, nejsi ty z COPky ??? mi ten zdroják je nějakej povědomej
Oprava: nedávej tam clrf porta ale setf porta ( teda jestli 16f88 zná instrukci setf )
V tudle chvíli se mi na disleji zobrazí jenom 0 a po vypnutí a zapnutí stále jenom 0. Takže chybu bych hledal asi v zápisu nebo ve čtení...
To vynulovanie je OK,nevedel som že 16f88 ma takú kratučkú pamäť,
že adresa 2110 zasahuje už do EEPROM.
Pawalo myslel SETF PORTA kvôli tomu že display sa zhasína nastavením všetkých bitov portu A na Log.1. Tak by to bolo najjednoduchšie,lenže túto inštrukciu tento mikrokontrolér nepozná.
Riadok 258 treba odstrániť,pretože počet je inkrementovaný 2 krát.
Ďalej nieje ošetrené väčšie číslo ako 9 v rutine tabulka.Inštrukcia return
na konci je nanič,ak bude číslo > 10 tak sa aj tak preskočí a program skolabuje. Pred volaním rutiny tabulka treba zabezpečiť že číslo bude iba v rozsahu 0-9.
Lepšie ošetriť zakmitavanie tlačítka,určite by som doplnil sekciu "je stále stlačené?" a "je uvolnené tlačítko?" by som dal na začiatok.
Aha, asi můj dotaz bude znít hodně stupidně, ale já v tom programu přece větší číslo než 9 nevkládám? Tak jak bych tedy měl ošetřit větší čísla? Každopádně děkuju za pomoc.
Založen: Oct 06, 2005 Příspěvky: 87 Bydliště: Tábor
Zaslal: pá leden 03 2014, 17:53 Předmět:
no vono čtení i zápis mi příde necelej,,, ošetření překročení čísla 9 to chtít bude, jinak ti to pak bude v tabulce skákat kamsi dám do programu. bude to chctí před skokem do tabulky zjistit jestli je číslo větší, a nebo asi jednoduší metodou a to tak že do tabulky na 11 pozici dáš třeba znak E jako Error a na 12 pozici se dá decf pocet. takže funkce bude taká že když zapneš po jedenáctý, tak se ukáže E a když pak zapneš po 12 tak se provede dekrementace na 11, dáš goto $-2 aby si skočil na řádek s pozicí znaku E.
no vono čtení i zápis mi příde necelej,,, ošetření překročení čísla 9 to chtít bude, jinak ti to pak bude v tabulce skákat kamsi dám do programu. bude to chctí před skokem do tabulky zjistit jestli je číslo větší, a nebo asi jednoduší metodou a to tak že do tabulky na 11 pozici dáš třeba znak E jako Error a na 12 pozici se dá decf pocet. takže funkce bude taká že když zapneš po jedenáctý, tak se ukáže E a když pak zapneš po 12 tak se provede dekrementace na 11, dáš goto $-2 aby si skočil na řádek s pozicí znaku E.
zase sem v praci, takže funkce neověřena. až v noci dorazim, tak si snad už vzpomenu a skusim simulaci celýho programu.
Paráda, to ošetření chápu. Nějak podobně to chtěl řešit spolužák. Já bych ti zase nerad ubírat spánek kvůli té simulaci, ale pokud si najdeš čas, budu jedině rád.
V tudle chvíli se mi na disleji zobrazí jenom 0 a po vypnutí a zapnutí stále jenom 0. Takže chybu bych hledal asi v zápisu nebo ve čtení.
Je treba si uvedomiť že k zápisu dôjde až po stlačení tlačítka,takže zaznamenaný bude len výpadok po ktorom je stlacené tlačítko !
Skontroluj si zápisovú rutinu podľa datasheetu,chýba ti tam odomknutie zápisu a hlavne čakanie na dokončenie zápisu,to môže trvať aj niekoľko desiatok milisekúnd a môže mať za určitých okolností fatálne dôsledky.
Založen: Oct 06, 2005 Příspěvky: 87 Bydliště: Tábor
Zaslal: pá leden 03 2014, 23:55 Předmět:
tááák už je to tu...
v příloze máš přepsanej zdroják, takže si to porovnej s tim tvym at víš co sem přepisoval. Měl si špatně čtení i zápis, no špatně, spíš nekompletní. dopsal sem ti tam to ošetření v tabulce že když bude hodnota větší jak 9, tak ti to vypíše E a pak to bude vypisovat pořád E, vlastně dokud nesmažeš EEPROM. a taky sem ti trochu zpřeházel začátek v programovej smyčce, měl si to tam nelogicky posobě. No prohlídni, porovnej, pokud něco nebudeš chápat, ptej se.
stačí použiť príkaz : banksel 0
V tomto mini programe ti makra akurát pletú hlavu.Treba ho používať prednostne a neriešiť prepínanie bánk všelijakými inými spôsobmi.Ale to len tak naokraj,pretože neviem či to nebol zámer ukázať ich použitie.
Založen: Oct 06, 2005 Příspěvky: 87 Bydliště: Tábor
Zaslal: so leden 04 2014, 12:20 Předmět:
jen pro pořádek,,,,, za nikoho sem domácí úkol nedělal a nikomu sem nic nesežral. bylo hnedka jasný že to je do školy. když vidim snahu něco vytvořit, tak pomůžu. celej program bych mu nikdy nepsal.
Kdyby měl snahu něco vytvořit, tak bych nic nenamítal... jenže to že "chtěl pomoci" ve stejném čase a s textem ve stejném znění hned na dvou fórech najednou dost svědčí o opaku. Tím že mu pomáháš mu ve skutečnosti nepomáháš, ale přímo škodíš.
Ale dost hádek, nemám v úmyslu se tu s kýmkoliv hádat. Zkus se prosím na tím, co jsem napsal, trochu hlouběji zamyslet, jestli na tom náhodou něco nemůže být...
To, že je to do školy jsem hned ze začátku psal. Takže pokud by s tím někdo měl problem nemusel mi jakkoliv pomáhat či radit. Že jsem "otravoval" i jinde? To je pravda, ale nepsal jsem to tam z toho důvodu jak říkáš. Nebyl jsem si jistý, jestli se mi dostane vůbec nějaké rady.
Ale chápu co chceš říct. Jen bych na svou obhajobu dodal, že toto je poslední úloha ve které budu s PICem dělat a obecně s assemblerem. Takže si nemyslim, že by mi škodil ba naopak mi hodně pomohl. Assembleru rozumim opravdu jenom mírně a po této úloze se s ním snad už nikdy nesetkám.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
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.