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í 

PIC16F676, konfigurace A/D převodníku
Jdi na stránku Předchozí  1, 2, 3, 4  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
fikes



Založen: Nov 15, 2005
Příspěvky: 70
Bydliště: Trutnov

PříspěvekZaslal: so duben 07 2012, 19:02    Předmět: Citovat

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.

Stáhnout
 Soubor:  P_10a_merak pro nabijecku.ASM
 Velikost:  29.97 kB
 Staženo:  96 krát

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



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

PříspěvekZaslal: so duben 07 2012, 23:31    Předmět: Citovat

inicializácia a samotné isr je zmätočné
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Chenzee



Založen: Jun 26, 2007
Příspěvky: 464
Bydliště: Vysočina

PříspěvekZaslal: ne duben 08 2012, 4:44    Předmět: Citovat

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



Založen: Aug 07, 2010
Příspěvky: 262

PříspěvekZaslal: ne duben 08 2012, 10:30    Předmět: Citovat

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

kód:
errorlevel -302
.
.
       MOVLW   .200
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
strg



Založen: Oct 14, 2004
Příspěvky: 26

PříspěvekZaslal: ne duben 08 2012, 11:41    Předmět: Citovat

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



Založen: Aug 07, 2010
Příspěvky: 262

PříspěvekZaslal: ne duben 08 2012, 11:49    Předmět: Citovat

ma staci se podivat
kód:
MOVLW   b'01101011'
      MOVWF   ANSEL
      MOVLW   b'11111111'
      MOVWF   TRISA
      MOVLW   b'11000000'
      CLRF   TRISB
      MOVLW   b'11010000'
      MOVWF   OPTION_REG
      BSF      PIE1,ADIE
      BSF      INTCON,PEIE
      MOVLW   b'10100000'
      MOVWF   ADCON1
      MOVLW   b'01100000'
      MOVWF   OSCCON
      BCF      STATUS,RP0
      MOVLW   b'01000001'
      MOVWF   ADCON0
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
strg



Založen: Oct 14, 2004
Příspěvky: 26

PříspěvekZaslal: ne duben 08 2012, 13:11    Předmět: Citovat

OK Maš pravdu to som si nevšimol. Ale to prepínanie banky platí.
Embarassed
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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



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

PříspěvekZaslal: ne duben 08 2012, 13:16    Předmět: Citovat

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



Založen: Nov 15, 2005
Příspěvky: 70
Bydliště: Trutnov

PříspěvekZaslal: ne duben 08 2012, 16:39    Předmět: Citovat

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



Založen: Aug 07, 2010
Příspěvky: 262

PříspěvekZaslal: ne duben 08 2012, 16:55    Předmět: Citovat

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

jo, skus se naucit pouzivat BANKSEL , Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
fikes



Založen: Nov 15, 2005
Příspěvky: 70
Bydliště: Trutnov

PříspěvekZaslal: po duben 09 2012, 21:58    Předmět: Citovat

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



Založen: Jun 26, 2007
Příspěvky: 464
Bydliště: Vysočina

PříspěvekZaslal: út duben 10 2012, 4:00    Předmět: Citovat

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

_________________
Žádnej učenej z nebe nespadl ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
fikes



Založen: Nov 15, 2005
Příspěvky: 70
Bydliště: Trutnov

PříspěvekZaslal: út duben 10 2012, 20:58    Předmět: Citovat

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



Založen: Aug 07, 2010
Příspěvky: 262

PříspěvekZaslal: st duben 11 2012, 13:08    Předmět: Citovat

vydis jak je to snadny Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
fikes



Založen: Nov 15, 2005
Příspěvky: 70
Bydliště: Trutnov

PříspěvekZaslal: ne listopad 11 2012, 13:14    Předmět: Citovat

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.

Mám to nastaveno takto:

LIST p=16F88 ; list directive to define processor
#INCLUDE <P16F88.INC> ; processor specific variable definitions
;------------------------------------------------------------------------------
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF


v INI
BSF STATUS,RP0
MOVLW b'00001111'
MOVWF ANSEL
; MOVLW b'11010000'
; MOVWF OPTION_REG
; BSF PIE1,ADIE
; BSF INTCON,PEIE
BSF STATUS,RP0
MOVLW b'11100000'
MOVWF ADCON1
BCF STATUS,RP0
MOVLW b'11000001'
MOVWF ADCON0

v podprogramu:

READ_REG
CALL pause
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,RP0
BTFSC ADRESL,6
....

Už nevím co s tím, zkoušel jsem spousta nastavení v ADCON0 s časama a nic a nic, nechce to měřit.
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 Předchozí  1, 2, 3, 4  Další
Strana 2 z 4

 
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.17 sekund