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í 

mega644 - komparator - timer1

 
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
apam



Založen: Mar 17, 2007
Příspěvky: 111

PříspěvekZaslal: so leden 01 2011, 16:16    Předmět: mega644 - komparator - timer1 Citovat

Ví někdo proč mi stale vypisuje hodnotu index_1 = 0
potřebuji měřit čas překlopení komparatoru.
program je v Bascomu.
kód:
...
start adc
Timer1 = 0
Bitwait Acsr.aco , Reset
Start Timer1
Bitwait Acsr.aco , Set
Stop Timer1
Index_1 = Timer1
stop adc
...

jak by to vypadalo s přerušením?


Naposledy upravil apam dne so leden 01 2011, 19:49, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: so leden 01 2011, 16:45    Předmět: Citovat

Co z toho máme poznat?
Pošli kompletní překladu schopný kód, zkrácený tak aby ukazoval problém.
A pokud možno použij tlačítko "Code".
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
apam



Založen: Mar 17, 2007
Příspěvky: 111

PříspěvekZaslal: so leden 01 2011, 17:26    Předmět: Citovat

kód:
$regfile = "m644def.dat"
$crystal = 20000000
$sim

Config Lcd = 16 * 2
Config Adc = Single , Prescaler = 16 , Reference = Avcc
Config Timer1 = Timer
Acsr.acbg = 1                                               'ain na interni ref
Dim Strt As String * 5 , Index_1 As Word , Ad As Word

Do
   Start Adc

   Ad = Getadc(0)
   Strt = Str(ad)
   Strt = Format(strt , "     ")
   Locate 1 , 1
   Lcd "ADC 0  ="
   Locate 1 , 10
   Lcd Strt

   Timer1 = 0
   Bitwait Acsr.5 , Reset
   Start Timer1
   Bitwait Acsr.5 , Set
   Stop Timer1

   Stop Adc

   Index_1 = Timer1
   Strt = Str(index_1)
   Strt = Format(strt , "     ")
   Locate 2 , 1
   Lcd "Timer1 ="
   Locate 2 , 10
   Lcd Strt
Loop

End


Naposledy upravil apam dne so leden 01 2011, 19:49, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: so leden 01 2011, 18:31    Předmět: Citovat

1.
kód:
Config Timer1 = Timer

Takto se timer1 nerozběhne. Je nutné přidat prescaler.
kód:
Config Timer1 = Timer, prescale = 1


2.
kód:
Timer1 = 0
Bitwait Acsr.5 , Reset
Start Timer1
Bitwait Acsr.5 , Set
Stop Timer1

To nebude fungovat. Čítání se spustí např. i v okamžiku kdy Acsr.5 je už nějakou
dobu v úrovni 0, takže změříš jenom část pulsu.

3.
Vynech Start ADC a Stop ADC v hlavní smyčce.
Pro maximální přesnost má být frekvence ADC mezi 50 a 200 kHz,
takže předdělič ADC by měl být 128.

Běžnější způsob měření délky pulsu je pomocí Input Capture.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
apam



Založen: Mar 17, 2007
Příspěvky: 111

PříspěvekZaslal: so leden 01 2011, 19:37    Předmět: Citovat

S tou předděličkou mě to nějak uteklo... Diky za radu. Timer se rozbehl, bohužel jak píšeš přesnost měření není moc velká. Jde o to, že ve skutečnosti chci vyrobit osciloskop, který využívá vestavěný adc převodník, pin AIN0 je připojený na offset (2,45V) vstupního oz a AIN1 je spojen se vstupem ADC0 a tvoří jakýsi triger, kterým se spouští načítání dat do datové řady která se dál zpracovává, ve skutečnosti je to takhle:
kód:
Start Adc
  Bitwait Acsr.5 , Set       
  For Poz_x = 1 To 132
    Ad_w(poz_x) = Getadc(0)
  Next
Stop Adc

Timer1 = 0
Bitwait Acsr.5 , Set                                   
Start Timer1

Bitwait Acsr.5 , Reset
Stop Timer1

Index_1 = Timer1
...
...

snažím se, aby byl program co nejrychlejší a zapojení co nejjednodušší.
cílem té části s tím timer1 je zjistit délku periody
možná by mi pomohlo řešit to měření času pomocí přerušení vyvolaným překlopením komparatoru. to ale nevím jak obsloužit, nebo je jiný vhodnější způsob?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: so leden 01 2011, 20:22    Předmět: Citovat

citace:
přesnost měření není moc velká
Nevím jestli jsi mi rozumněl.
Přesnost není malá ale nulová.
Pro určitou délku pulsu dostaneš náhodně hodnoty 0 až délka.

Příkaz "Bitwait bit, reset" nečeká na sestupnou hranu,
pokud je bit 0 tak program jde hned dál.

Můžeš tento kód použít, ale na začátku musíš čekat na sestupnou hranu:
Bitwait bit, set
Bitwait bit, reset
Start timer

Já bych zkusil hotové řešení
http://www.serasidis.gr/circuits/AVR_oscilloscope/avr_oscilloscope.htm
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
Strana 1 z 1

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