Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Assembler- oprava kódu. PIC16F88
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
PIClover



Založen: Jan 02, 2014
Příspěvky: 10

PříspěvekZaslal: čt leden 02 2014, 19:01    Předmět: Assembler- oprava kódu. PIC16F88 Citovat

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.



PraceSEEPROM.rar
 Komentář:

Stáhnout
 Soubor:  PraceSEEPROM.rar
 Velikost:  119.93 kB
 Staženo:  121 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pawalo



Založen: Oct 06, 2005
Příspěvky: 87
Bydliště: Tábor

PříspěvekZaslal: čt leden 02 2014, 20:17    Předmět: Citovat

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 Very Happy


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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Niki31
Zablokován


Založen: Jul 05, 2008
Příspěvky: 131

PříspěvekZaslal: čt leden 02 2014, 20:17    Předmět: Citovat

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ší.

Doporučujem používať original include súbory.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
monterjirka



Založen: Jun 14, 2003
Příspěvky: 2794
Bydliště: Blížejov

PříspěvekZaslal: čt leden 02 2014, 20:46    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: čt leden 02 2014, 23:43    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Niki31
Zablokován


Založen: Jul 05, 2008
Příspěvky: 131

PříspěvekZaslal: pá leden 03 2014, 9:05    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
PIClover



Založen: Jan 02, 2014
Příspěvky: 10

PříspěvekZaslal: pá leden 03 2014, 15:19    Předmět: Citovat

Pawalo napsal(a):
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 Very Happy


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í...

Jojo z COPky jsem Very Happy Úloha na pana Bumbu...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
PIClover



Založen: Jan 02, 2014
Příspěvky: 10

PříspěvekZaslal: pá leden 03 2014, 15:46    Předmět: Citovat

Niki31 napsal(a):
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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pawalo



Založen: Oct 06, 2005
Příspěvky: 87
Bydliště: Tábor

PříspěvekZaslal: pá leden 03 2014, 17:53    Předmět: Citovat

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.

asi takhle by to vypadalo:

retlw h'00' ;Znak "8".
retlw h'10' ;Znak "9".
retlw h'XX' ;Znak ''E''
decf pocet
goto $-2

zase sem v praci, takže funkce neověřena. až v noci dorazim, tak si snad už vzpomenu a skusim simulaci celýho programu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
PIClover



Založen: Jan 02, 2014
Příspěvky: 10

PříspěvekZaslal: pá leden 03 2014, 19:38    Předmět: Citovat

Pawalo napsal(a):
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.

asi takhle by to vypadalo:

retlw h'00' ;Znak "8".
retlw h'10' ;Znak "9".
retlw h'XX' ;Znak ''E''
decf pocet
goto $-2

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Niki31
Zablokován


Založen: Jul 05, 2008
Příspěvky: 131

PříspěvekZaslal: pá leden 03 2014, 23:05    Předmět: Citovat

citace:
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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pawalo



Založen: Oct 06, 2005
Příspěvky: 87
Bydliště: Tábor

PříspěvekZaslal: pá leden 03 2014, 23:55    Předmět: Citovat

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.



COP_TEST.asm
 Komentář:

Stáhnout
 Soubor:  COP_TEST.asm
 Velikost:  12.63 kB
 Staženo:  125 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Niki31
Zablokován


Založen: Jul 05, 2008
Příspěvky: 131

PříspěvekZaslal: so leden 04 2014, 8:05    Předmět: Citovat

Ešte taká malá poznámka, namiesto makra:

citace:
BANK0 macro
bcf status,5
bcf status,6
endm


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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Pawalo



Založen: Oct 06, 2005
Příspěvky: 87
Bydliště: Tábor

PříspěvekZaslal: so leden 04 2014, 12:20    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
PIClover



Založen: Jan 02, 2014
Příspěvky: 10

PříspěvekZaslal: so leden 04 2014, 15:11    Předmět: Citovat

Jeejda napsal(a):
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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
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

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

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.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.16 sekund