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í 

ATTINY4313 výstupy a propojení čítačů

 
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
epes



Založen: Aug 05, 2008
Příspěvky: 116
Bydliště: Praha 5

PříspěvekZaslal: út listopad 15 2016, 19:36    Předmět: ATTINY4313 výstupy a propojení čítačů Citovat

1. Potřeboval bych poradit jak dosáhnout toho, aby výstup čítače TCNT0 byl na pinu PD5. Výstup na pin PB2 je bez problémů. Příkazy
TCCR0A=0b01000010;
OCR0A=250;
TCCR0B=0b00000100;
zajistí výstupna pin PB2. Ovšem příkazy
TCCR0A=0b00010010;
OCR0B=250;
TCCR0B=0b00000100;
výstup na pin PD5 neprovedou. A já nejsem schopen zjistit proč.

2. Je vůbec možné propojit výstup čítače0 se vstupem čítače1 bez drátů?
Předpokládal jsem, že když nastavím výstup čítače0 na pin PD5 a zároveň nastavím pin PD5 jako externí vstup čítače1, že by to eventuálně mohlo fungovat. Jak je vidět předpoklad nebyl nejlepjší a proto hledám někoho kdo by mně poradil.
Díky za každou radu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: út listopad 15 2016, 20:27    Předmět: Citovat

Když používáš CTC režim, musíš nastavit OCR0A, protože určuje periodu. OCR0B pak musí mít menší nebo stejnou hodnotu jako OCR0A, aby se OC0B překlápěl.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
epes



Založen: Aug 05, 2008
Příspěvky: 116
Bydliště: Praha 5

PříspěvekZaslal: út listopad 15 2016, 21:00    Předmět: Citovat

Pokud myslýš např. toto:
TCCR0A=0b01010010;
OCR0A=250;
OCR0B=250;
TCCR0B=0b00000100;

tak to jsem též zkusil a na pinu PD5 kde nictu nic.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
kachle



Založen: Nov 23, 2015
Příspěvky: 276

PříspěvekZaslal: út listopad 15 2016, 21:17    Předmět: Citovat

A jaký použiješ programátor na tu ATTINY4313?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: út listopad 15 2016, 21:48    Předmět: Citovat

Ano zapojit čítače do "kaskády" lze a taky se to tak dělá už několik let. Very Happy
Oba TCNT0 i TCNT1 mají možnost externího vstupu.
Oba TCNT0 i TCNT1 mají možnost výstupu na pin.
Budeš potřebovat jeden drátek, kterým propojíš fyzicky výstup jednoho do vstupu druhého.
Lze takto TCNT0 -> TCNT1 nebo takto TCNT1 -> TCNT0

pozn. je třeba mít otevřený datasheet a udělat několik testů, než je sw odladěn.



161115_atmel.jpg
 Komentář:

Stáhnout
 Soubor:  161115_atmel.jpg
 Velikost:  37.87 kB
 Staženo:  120 krát

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



Založen: Aug 05, 2008
Příspěvky: 116
Bydliště: Praha 5

PříspěvekZaslal: út listopad 15 2016, 22:01    Předmět: Citovat

Kachle, používám programátor DRAGON.
S drátkem to umím, takže jsem datasheet nejspíš četl. Dotaz byl na bezdrátkové zapojeníé fr66...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: st listopad 16 2016, 20:04    Předmět: Citovat

epes napsal(a):
Pokud myslýš např. toto:
TCCR0A=0b01010010;
OCR0A=250;
OCR0B=250;
TCCR0B=0b00000100;

tak to jsem též zkusil a na pinu PD5 kde nictu nic.

Nemyslým, myslím. A to máš blbý, mně to tu na bastl desce bez problému funguje i s tím "bezdrátkovým" propojením T0 a T1. Co třeba nastavit pin PD5 jako výstupní?

kód:
.include "tn2313def.inc"

.cseg
.org 0
   rjmp RESET      ; Reset Handler

RESET:   cli

   ldi R16,low(RAMEND)
   out SPL,R16      ; Zasobnik na konci RAM

   ldi R16,(1<<3)
   out DDRB,R16      ; PB3 out
   ldi R16,$0FF
   out PORTB,R16      ;

   ldi R16,(1<<5)
   out DDRD,R16      ; PD5 out
   ldi R16,$0F7
   out PORTD,R16      ;

   rcall T0Ini      ; Inicializace T0
   rcall T1Ini      ; Inicializace T1

lp0:   rjmp lp0

;------------------------------------------------------------------------------
; Inicializace casovace 0
T0Ini:   ldi R16,(1<<COM0B0)|(1<<WGM01)   ; Toggle OC0B
   out TCCR0A,R16
   ldi R16,250
   out OCR0A,R16
   out OCR0B,R16
   ldi R16,(1<<CS02)   ; CTC, Clk / 256
   out TCCR0B,R16
   ret

;------------------------------------------------------------------------------
; Inicializace casovace 1
T1Ini:   ldi R16,high(49)
   out OCR1AH,R16
   ldi R16,low(49)
   out OCR1AL,R16

   ldi R16,(1<<COM1A0)
   out TCCR1A,R16      ; Toggle 0C1A
   ldi R16,(1<<WGM12)|(1<<CS12)|(1<<CS11)
   out TCCR1B,R16      ; CTC, Clk = T1
   ret
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: st listopad 16 2016, 20:31    Předmět: Citovat

@lesana OK rozumím, navrhované řešení využívá skutečnosti, že OC0B sdílí s T1 stejný pin.
Atmel má pěknou AN133 na téma kaskádování čítačů/časovačů.



161116_an133.jpg
 Komentář:

Stáhnout
 Soubor:  161116_an133.jpg
 Velikost:  19.93 kB
 Staženo:  100 krát

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



Založen: Aug 05, 2008
Příspěvky: 116
Bydliště: Praha 5

PříspěvekZaslal: čt listopad 17 2016, 11:36    Předmět: Citovat

Tak se tak Lesanko hned nedurdi, to víš mužský občas myslí tvrdě. A že to mám blbý(é), to vím už dávno, zvlášť když jsem assembler viděl naposledy asi před 100 lety a tak vůbec nerozumím proč nastavuješ pin PB3 jako výstupní když výstup čítače0 je na pinu PB2. Dále vůbec nechápu význam příkazů
ldi R16,$0F7
out PORTD,R16 .
Jinak si myslím, že v mém céčkovském kodu je to samé, včetně příkazu na nastavení pinu PD5 jako výstupního pinu.
Při včerejším laborováním jsem zjistil, že když nastavím čítač0 na normální mod (0b01010000), tak se signál objeví na obou pinech. Takže nejspíš bude chybička někde v nastavení registrů, ale kde. Nenapadá Tě něco, Lesanko?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: čt listopad 17 2016, 13:25    Předmět: Citovat

PB3 nastavuju na výstup proto, že mě zajímá výstup A čítače 1, abych viděla, že funguje to zřetězení. Naopak výstup A čítače 0 mě vůbec nezajímá, protože použitý je jen výstup B na pinu PD3.
ldi R16,$0F7
out PORTD,R16
mělo být správně
ldi R16,$7F
out PORTD,R16
Ale to je celkem vedlejší, jen se tím nastavují na vstupních pinech pull-up odpory, aby vstupy nevlály ve vzduchu a procesor zbytečně moc nežral. Kde máš chybu v programu říct neumím, jelikož jsi ho sem celý nedal.
Jinak k tomu nastavování registrů je lepší používat názvy bitů + rotace, tj.
TCCR0A=(1<<COM0A0)|(1<<COM0B0)|(1<<WGM01);
místo
TCCR0A=0b01010010;
Je to mnohem přehlednější, vychytá se tím řada chyb (překlepů) a je to i částečně procesorově nezávislé.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
epes



Založen: Aug 05, 2008
Příspěvky: 116
Bydliště: Praha 5

PříspěvekZaslal: čt listopad 17 2016, 18:28    Předmět: Citovat

Přiznám se, že jsem netušil,že pull-up odpory snižují spotřebu procesoru, spíš jsem si myslel, že omezují možnost nákazy v tom sychravém povětří. Holt učit se, učit se musí člověk i na stará kolena, pak se možná i amatérům bude zdát i složitý zápis profíka trochu čitelnější.

Ten můj veleprogram vypadá následovně:

ddrd=0b0000000;
portd=0b0100000;
ddrb=0b11111111;
portb=0b00000000;
TCCR0A=0b01010010;
TCCR1A=0B01000000;
OCR0A=250;
OCR0B=250;
TCCR0B=0b00000100;
těchto pár příkazů mi vyexportuje podělený systémový kmitočet na pin PB2, ale na PD5 nikoli. A pokud změním TCCR0A=0b01010010; na TCCR0A=0b01010000; tak to funguje.

Podle tebe by pak stačil příkaz TCCR1B=0b00001111; a čítače by se propojily do kaskády tak, jak jsem si to představoval.
Teď už jen najít tu chybu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: čt listopad 17 2016, 20:13    Předmět: Citovat

Jak ti to může fungovat, když máš ddrd=0b0000000; tj. celý port D a tedy i pin PD5 jako vstupní?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
epes



Založen: Aug 05, 2008
Příspěvky: 116
Bydliště: Praha 5

PříspěvekZaslal: čt listopad 17 2016, 21:21    Předmět: Citovat

Á chybička se vloudila, naštěstí jen při přepisu. V originále je jednička.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
lesana87



Založen: Sep 20, 2014
Příspěvky: 3330

PříspěvekZaslal: čt listopad 17 2016, 21:32    Předmět: Citovat

Když je takový problém sem zkopírovat ten skutečný program, ve kterém se má hledat chyba, tak to Ahoj chlopi
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
epes



Založen: Aug 05, 2008
Příspěvky: 116
Bydliště: Praha 5

PříspěvekZaslal: čt listopad 17 2016, 22:00    Předmět: Citovat

Tak se zase hned nedurdi, Lesanko, originál program Ti zaslat nemůžu neboť sedím cca 160km od svého bastlířského kutlochu a u sebe mám pouze papírovou verzi původníého programu. Z té původní verze zbylo pro potřeby ověření možnosti propojení čítačů jen pár řádků. Věř mi, že jsem si kombinováním a nastavením vyhrál hodně dlouho, než jsem se obrátil na toto forum. Až se v sobotu vrátím domů, zkusím nějakým způsobem přeložit Tvůj assemblerovský kod a naprogramovat třeba ATTINY2313 abych vyloučil eventuální chybu překladače a programátoru. No, apokud to nebude k ničemu a Ty už mi nic jiného neporadíš, budu nejspíše donucen jít dělat něco užitečnějšícho.
Dobrou noc
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
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.19 sekund