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í 

Servoreverz s ATtiny85
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
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: út květen 21 2024, 18:21    Předmět: Citovat

Tak nevím, kolikrát to tady mám napsat. Servu stačí ±2 us na to, aby bylo neklidný v středový poloze. A jak chceš časovačem, kterej se plní periodou 1us něco přesně u takovýhleho signálu měřit? Vzorkovací kmitočet jak známo musí být cca 10x vyšší než měřený.
Mám tady vzorek vývojový desky Silabs C8051F392. 16 bitů časovač by se plnil kmitočtem 25MHz, což by dalo při měření až 2,65ms, z obsahu spočítat reverz, v druhým časovači odečítat dýlku výstupního signálu. V asembleru je u F392 většina instrukcí jenocyklových na kmitočtu 50MHz. Šváb je o trochu větší než ATtiny a kolem nepotřebuje vůbec žádný součástky. Výzva si zopáknout A51, s kterým jsem dělal už před 30 lety. Smile

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Atlan



Založen: May 10, 2004
Příspěvky: 4513
Bydliště: Košice

PříspěvekZaslal: st květen 22 2024, 9:47    Předmět: Citovat

No ked to pise pod arduinom tak sa necudujem ze sa to cuka. Tam totiz uP robi veci o ktorych uzivatel nevie.

Ch32v003 stoji centy a maclkom potencial. https://pallavaggarwal.in/2023/09/23/ch32v003-programming-pwm-output/amp/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
samec



Založen: Dec 19, 2017
Příspěvky: 4405

PříspěvekZaslal: st květen 22 2024, 10:21    Předmět: Citovat

ATtiny85 má až 64MHz counter, ale za 2 dni intenzívneho hľadania sa mi nepodarilo nájsť kompletne prehľadnú dokumentáciu ku všetkým režimom. Takže stále netuším, či okrem generovania rýchleho PWM dokáže aj presné meranie krátkych časov. Možno externým hradlovaním, ale to už je jednoduchšie použiť 555.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dumitru



Založen: Dec 11, 2015
Příspěvky: 172
Bydliště: Slovensko,Bratislava

PříspěvekZaslal: st květen 22 2024, 13:53    Předmět: Citovat

Celeron napsal(a):
A jak chceš časovačem, kterej se plní periodou 1us něco přesně u takovýhleho signálu měřit?


Možno blba otázka ale mne nie je jasne prečo 1us(1Mhz) ? ak máš 8Mhz čo je 125ns, 125*256(8bit)=32000ns alebo 32us , počas 1us vieš napočítať do 8

Vidím že tam máš prerušenie treba tam v SW počítať s týmto , vbehnúť do prerušenia trvá dlhšie ako z neho vyjsť von
kód:

3.8.1 Interrupt Response Time
The interrupt execution response for all the enabled AVR® interrupts is four clock cycles minimum. After four clock cycles the
program vector address for the actual interrupt handling routine is executed. During this four clock cycle period, the program
counter is pushed onto the stack. The vector is normally a jump to the interrupt routine, and this jump takes three clock
cycles. If an interrupt occurs during execution of a multi-cycle instruction, this instruction is completed before the interrupt is
served. If an interrupt occurs when the MCU is in sleep mode, the interrupt execution response time is increased by four
clock cycles. This increase comes in addition to the start-up time from the selected sleep mode.
A return from an interrupt handling routine takes four clock cycles. During these four clock cycles, the program counter (two
bytes) is popped back from the stack, the stack pointer is incremented by two, and the I-bit in SREG is set.



Píšeš že tam maš 8Mhz kryštál predpokladám že externý a nefunguješ od interných hodín inak je to potrebne kalibrovať , mne bez kalibrácie ani UART na 9600baud nefungoval .

No a nakoniec z datasheetu prvá strana Attiny môže ísť až do 20Mhz.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: st květen 22 2024, 16:11    Předmět: Citovat

Atlan napsal(a):
No ked to pise pod arduinom tak sa necudujem ze sa to cuka. Tam totiz uP robi veci o ktorych uzivatel nevie.

Od kdy je ATtiny85 Arduino? Procesor bez ničeho kolem, poslední verze v asembleru a stejně cuká.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: st květen 22 2024, 16:31    Předmět: Citovat

Dumitru napsal(a):

Možno blba otázka ale mne nie je jasne prečo 1us(1Mhz) ? ak máš 8Mhz čo je 125ns, 125*256(8bit)=32000ns alebo 32us , počas 1us vieš napočítať do 8

Ano, můžeš nastavit TCCRB na xxxxx001, tedy vstup přímo CLKi/o (No prescaling) od hodin 8MHz ale pak s 8 bitama TC0 napočítáš jen jak píšeš do 32us. Jenže měřený signál může mít až 2,2ms. Tak si spočítej, kolikrát bys musel nechat TC0 vygenerovat přerušení od přetečení TC0 a přičíst 1 v registru, kterej by nahrazoval vyšších 8 bitů pro pseudočasovač 16 bitů. Skoro 70 krát. Jak se časově zpracovává přerušení jsi tu popsal. S jakou přesností by to asi měřilo? Prostě na ATtiny85 s časovačema 8 bitů to nejde s dostatečnou přesností a stabilitou realizovat.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
samec



Založen: Dec 19, 2017
Příspěvky: 4405

PříspěvekZaslal: st květen 22 2024, 17:09    Předmět: Citovat

ATtiny85 má dva 8-bitové časovače. Ak jednému nastavíš prescaler na /1 a druhému na /256, tak máš v podstate jeden 16-bitový časovač.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: st květen 22 2024, 17:27    Předmět: Citovat

Jako myslíš je zřetězit za sebou? To by ale ten druhej musel být čítač a né časovač. A je tam ten samej problém, při měření 2,2ms bude přerušení od přetečení potřeba kolikrát? Vzhledem k "náhodnýmu" počtu cyklů při zpracování přerušení to bude přesný jak přesýpací hodiny.
_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ruprecht



Založen: Sep 28, 2005
Příspěvky: 1340
Bydliště: ZČ + JM

PříspěvekZaslal: st květen 22 2024, 19:21    Předmět: Citovat

Ne, prostě oba časovače spustíš s náběžnou hranou a při skončení pulsu oba zastavíš a přečteš stavy obou čítačů jako 16-bit údaj, MSB a LSB.
_________________
Kampaň, účelovka, nepodepsal, Palermo, ODS, Kalousek, je líp a jsou na to čísla, nastudujte si to.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: čt květen 23 2024, 0:27    Předmět: Citovat

Hmm, tak to mě nikdy nenapadlo. Díky za tip, vyzkouším.
_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: ne květen 26 2024, 23:51    Předmět: Citovat

Tak jsme s kámošem zjistili, že přes ATtiny 85 dělat reverz serva je cesta do pekel. Prostě jak do toho vstoupí měření vstupního signálu časovačem, tak je výstupní reverz signál nestabilní. A je úplně vuřt, jestli se používá na měření funkce micros, nebo přímý vyčítání hodnoty z časovače. A největší neklid má ta zde doporučovaná verze udělat ze dvou 8 bitů jeden 16 bitů za pomocí prescaleru 256 u jednoho z nich.
Ten procák prostě není na měření kolem 1us dost rychlej a nepřítomnost 16 bit časovače to ještě umocňuje.
Zkusil jsem napsat test časovače aby se na portu změnila hodnota při každým přetečení časovače a k tomu jsem dával prescalery, co Tiny 85 nabízí.
A už tady byl problém, ten signál na PB1 se náhodně chvěl o cca ± 2us. Takže je vidět, že tudy cesta nevede kvůli nepředvídatelnýmu chování časovačů při intervenci. Jestli si někdo myslíte, že víte kde je problém, tak sem s tím, budu docela vděčný.
kód:


// Přerušení při přetečení časovače
ISR(TIMER1_OVF_vect) {
  // Přepnout stav na výstupním pinu
  PORTB ^= (1 << PB1);
}
//-------------------------
void setup() {
  // Nastavit PB1 jako výstup
  DDRB |= (1 << PB1);

  // Inicializace časovače1
  TCCR1 = 0; // Zastavit časovač
  TCNT1 = 0; // Vynulovat časovač

  // Nastavit prescaler na 1,2,4,8,16,32,64,128,256,512,1024...)
  TCCR1 |= (1 << CS13); // CS13 na 1 pro prescaler 128

  // Povolit přerušení při přetečení časovače
  TIMSK |= (1 << TOIE1);

  // Globálně povolit přerušení
  sei();
}
//-----------------------
void loop() {
}

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
samec



Založen: Dec 19, 2017
Příspěvky: 4405

PříspěvekZaslal: po květen 27 2024, 7:08    Předmět: Citovat

Watchdog máš vypnutý?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: po květen 27 2024, 10:25    Předmět: Citovat

Ten je snad po Resetu vypnutý. Vím, že se dá zapnout v Bootloaderu, ale ten nepoužívám, peču přes ISP. Taky jse zapnout ve Fuses, ale tam taky není povolený. Zkusil jsem ho pro sichr vypnout programově. Ale ten neklid cca 4us tam je stále. Zkusím ten test přetečení časovače napsat na Mega328P.
kód:

ISR(TIMER1_OVF_vect) {
  PORTB ^= (1 << PB1);
}

void setup() {
  DDRB |= (1 << PB1);
  // Zapsat do WDTCR registru pro povolení změny
  WDTCR |= (1 << WDCE) | (1 << WDE);
  // Vypnout WDT
  WDTCR = 0x00;
  TCCR1 = 0;
  TCNT1 = 0;
  TCCR1 |= (1 << CS13); // CS13 na 1 pro prescaler 128
  TIMSK |= (1 << TOIE1);
  sei();
}

void loop() {
}

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Celeron



Založen: Apr 02, 2011
Příspěvky: 18314
Bydliště: Nový Bydžov

PříspěvekZaslal: po květen 27 2024, 12:10    Předmět: Citovat

Převedl jsem to na Mega328P na časovač 8 bitů Timer 2. Výsledek je, že na osciloskopu HP1741 nepatrnej neklid je taky ale pod 0,1us, líp to změřit nejde. Na BM520 čítači, rozsah 0,1us na výstupním portu hodnota kolísá mezi 2049,2 až 2049,3. To je proti stejnýmu code na Tiny85 nebetyčnej rozdíl.
kód:

// Přerušení při přetečení časovače 2
ISR(TIMER2_OVF_vect) {
  // Přepnout stav na výstupním pinu
  PORTB ^= (1 << PB1);
}
void setup() {
  // Deaktivovat watchdog timer
  WDTCSR |= (1 << WDCE) | (1 << WDE);
  WDTCSR = 0x00;

  // Nastavit PB1 jako výstup (pin 9)
  DDRB |= (1 << PB1);

  // Inicializace časovače2
  TCCR2A = 0; // Normální režim
  TCCR2B = 0; // Zastavit časovač
  TCNT2 = 0;  // Vynulovat časovač

  // Nastavit prescaler na 64
  TCCR2B |= (1 << CS22); // CS22 na 1 pro prescaler 64

  // Povolit přerušení při přetečení časovače
  TIMSK2 |= (1 << TOIE2);

  // Globálně povolit přerušení
  sei();
}

void loop() {
}

Ještě zkusím Tiny85 převýst z interního oscilátoru na krystal. Ale musím s1 k programátoru USBASP udělat destičku s krystalem a kondíkama, protože jak bych jednou přepnul fuse na krystal, tak je procík bez krystalu nedobytnej. V nejhorším mám na Tiny85 HVresetátor, ten si s ním poradí.

_________________
Jirka

Proč mi nemůže všechno chodit hned ?!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nostalcomp



Založen: Nov 09, 2022
Příspěvky: 94

PříspěvekZaslal: po květen 27 2024, 16:46    Předmět: Citovat

Celerone, já tomu nějak nerozumím. A jsem přesvědčen, že nejsem sám. Akorát většina to nepřizná. Asi z úcty k jednomu z největších tapetářů tohoto fóra. To prosím neber nijak zle a osobně, to je jen konstatování skutečnosti.

Takže:

Napíšeš, že máš hotovo (bez dalších podrobností) a přidáš fotku hotového reverzu, který údajně necuká. Fotka je pod textem o zapůjčeném továrním výrobku, což je přinejmenším matoucí. Jen o pár dní později už ale tvrdíš, že to s Attiny85 technicky nejde a vymejšlíš blbosti.

Píšeš cosi o verzi v assembleru, ale dáváš sem pořád zdrojáky v Céčku a ani neuvedeš čím to překládáš. Pokud to překládáš v Arduino IDE, tak nezapomeň, že překladač do kódu dodá aktivaci Timeru 0 a jeho obslužnou ISR kvůli funkcím millis a micros. Ty jsou pro servoreverz zbytečné a jen zdržují vykonávání programu. Pokud by se to psalo v opravdovém assembleru, tak si to tam člověk přece zbytečně nedá. A bůhví co ještě se tam automaticky přidává. On ten Arduino překladač vůbec umí "pěkný věci". Doporučuji přečíst třeba toto: Arduino poťouchlost – funkce map(). Proto taky nepoužívám funkci MAP a vždy si přepočty dělám "ručně". Mimochodem, autor toho textu se prý ozval tvůrcům Arduino překladače, upozornil je na chybu a navrhl opravu. Dostal odpověď ve smyslu toho, že se o chybě ví, ale nelze přepisovat definice funkcní kvůli zpětné kompatibilitě. Podobně je třeba dávat bacha na servoknihovnu a taky na řetězce. A kdoví, jaké další chyby a "ďáblové" se v překladech zdrojáků vyskytují.

Zpočátku pořád uvádíš, že timer je taktován impulsy s periodou 1uS a také píšeš, že strojový cyklus při 8MHz trvá 1uS. Ten timer už tu byl vyvrácen. S prescalerem nastaveným na 1 mají vstupní impulsy timeru periodu 125nS. A co se týká jádra CPU, tak i to lze 8x zrychlit nastavením registru CLKPR, resp. shozením pojistky CLKDIV8 (z výroby je nastavena!). Pak bude i strojní takt 125nS. To se pak člověk nediví, když lidi, než aby si prostudovali datasheet, raději rovnou sáhnou po výkonnějším procesoru.

Pokud se to napíše opravdu efektivně a budou se vybírat primárně 1-cyklové instrukce, tak to chodit prostě musí. Já bych se držel toho algoritmu s odečítáním vstupního servopulsu od 3ms. A je jedno, jestli budou servopulsy 1-2mS, nebo 0,8-2,2mS nebo 0,6-2,4mS. Pokud to bude symetrické kolem středu 1,5mS, vždy je stačí odečíst od 3mS. Na celý program pak stačí jedna jediná proměnná typu byte, která bude suplovat horní byte časovače. Žádný wordy nebo dokonce longy. V mezidobí bude vždy nastavena na 0 a v ISR timeru pak inkrementována a v hlavní smyčce testována. Timer bude vždy spouštěn na náběžku servopulsu a bude nastaven na automatický HW autoreload po 240 taktech (30uS). Je úplně jedno, jak dlouho trvá obsluha přerušení (pokud nebude větší než těch 30uS, což asi nehrozí). V okamžiku jeho obsluhy už si timer pojede dál svým životem. Testování náběžky a sestupky servopulsu a testování dočítání 3mS bych dělal v hlavní smyčce. Viz. průběhy v mém předešlém příspěvku. Nějaká chyba tam bude vždy. Ale určitě ne 2uS a bude víceméně konstantní a je tak možno ji korigovat úpravami hodnot reload a prom. Zkoušel jsem si to napsat na papír v jakémsi "esperantoassembleru" x51 a je to na pár bajtů. Do 2KB Attiny25 se to musí vejít 20x. Snažil jsem se vybírat instrukce, které mají AVR ekvivalent. Bohužel nemám žádný vhodný (=jednoduchý, ideálně pro DOS) AVR assembler, jako je TASM. Nevíte o něčem?

kód:

;"x51 esperantoassembler"
;jedno z mnoha moznych reseni
Start:
      clr servo_out
      di
      timer stop, CLKcpu = CLKosc/1
      nastavení timeru, prescaler /1, autoreload (256-240 = 16)
      timer Interrupt enable
init:
      prom = #0               ;nastaveni pom. promenne (MOV, LDI apod.)
      jnb servo_in, $         ;cekani na nabezku
      timer start           
      jb servo_in, $          ;cekani na sestupku
      setb servo_out          ;inverzni servopuls start
cyk:                          ;cekani na dokonceni casovani 3 mS
      mov a, prom             ;lze resit mnoha zpusoby (AVR stejne nema akumulator)
      cjne a, #100, ($+3)
      jc cyk                  ;prom < 100, opakuj
      clr servo_out           ;inverzni servopuls stop
      timer stop
      ;spousta casu na stourani se v uchu ci nose...
      jmp init                ;jdeme cekat na dalsi nabezku
           
ISR_tim:                      ;obsluha preruseni od timeru (ma autoreload)
     inc prom
     reti           


Ještě mě napadlo pro sichr dát na ten servovýstup 1nF keramiku proti GND, jako se to doporučuje u výstupu 555 při vazbě na logické obvody. Ale asi (určitě) je to úplně zbytečné.
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 3 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.16 sekund