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í 

Úprava programu "nf generátor" pro ATTiny25-20
Jdi na stránku 1, 2, 3  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
jade



Založen: Dec 28, 2004
Příspěvky: 980
Bydliště: Brno

PříspěvekZaslal: pá duben 07 2017, 20:41    Předmět: Úprava programu "nf generátor" pro ATTiny25-20 Citovat

Velmi bych poprosil o úpravu programu nf generátoru pro ATTiny25-20, který slouží jako zdroj signálu pro VLF maják.
Psal mi to bývalý kolega, který už má jinou práci a jiné zájmy...
Jde o to, že výsledný tón 3720hz (odvozený z kmitočtu krystalu 3,93Mhz, v současné podobě programu nepřerušovaný)
je potřeba klíčovat, aby výsledný signál tvořil tón, přerušovaný v rytmu cca 5-8hz tak, aby tón tvořil 80% a přerušení 20% každého "pípnutí".
Toho dosahuji dalším obvodem, podle mě zbytečným, když by to hravě zvládl ten MCU.
Potřebuji celé zařízení miniaturizovat, ten přerušovač mi tam zachází.
Byl bych vděčný, kdyby se mi na ten program někdo podíval, v céčku se vůbec nevyznám.
Děkuji předem za laskavost...



kód:
/*
 *
 * Created: 9.8.2012 20:02:00
 *  Author: Michal
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>

#define F_CPU 3800000UL
//   cas = x * (1 / 3.8E+6)
//   frekvence= 3.8E+6 / x

//   x = 3.8E+6 * pozadovany cas
//   x = 3.8E+6 / pozadovana frekvence (pul periody!!!!!)
char compare = 0x80;
int i;

int main(void)
{
   
   PORTB |= (0<<DDB2) | (1<<DDB1) | (1<<DDB0);   //nastaveni pull up
   DDRB |= (1<<DDB2) | (0<<DDB1) | (0<<DDB0);   //smerovz registr
   asm( "NOP");
   PCMSK |= (1<<PCINT1) | (1<<PCINT0);         //tlacitka povoleni pcint 1,0
   GIMSK |= (1<<PCIE);                     //povoleni pcint
   asm("NOP");
   TIMSK |= (1<<OCIE0A);                  //citac  preruseni pri porovnání
   TCCR0B |= (0<<CS02) | (0<<CS01) | (1<<CS00);//preddelicka 0
   GTCCR |= (1<<TSM)|(1<<PSR0);                     //zastaveni
   OCR0A = compare;                     //zapsani komparacni hodnoty
   TCNT0 = 0x00;                        //citac=0

   GTCCR &= 01111110;                     //zapnuti
   sei();                        //vsechna preruseni
   
    while(1)
    {}                                 //SMYCKA!!!!!!
     
   
    
   return(1);
}

ISR (PCINT0_vect)
{
   for (i=0;i<10;i++)
   {
      asm( "NOP");
   }
   
   if bit_is_clear(PINB,0) compare--;
   if bit_is_clear(PINB,1) compare++;
   
}



ISR (TIMER0_COMPA_vect)
{
   GTCCR |= (1<<TSM)|(1<<PSR0);         //vypnuti
   for (i=0;i<72;i++)
   {
      asm( "NOP");
   }
   PORTB ^= (1<<PORTB2);      //zmena vystupu
   OCR0A = compare;         //zapsani komparacni hodnoty
   TCNT0 = 0x00;            //citac=0
   GTCCR &= 01111110;         //zapnuti

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



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

PříspěvekZaslal: pá duben 07 2017, 22:14    Předmět: Citovat

MCU bude dělat ještě něco jiného nebo pouze "pípat"?
Pak by se nabízelo napsat to pro "Arduino" a použít s ATtiny85

V podstatě maličkost:
zapni tón
čekej
vypni tón
čekej
vrať se na začátek
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
jade



Založen: Dec 28, 2004
Příspěvky: 980
Bydliště: Brno

PříspěvekZaslal: pá duben 07 2017, 22:26    Předmět: Citovat

Jen pípat a ještě měnit základní frekvenci tónu v krocích +-10hz pomocí tlačítek (to už umí).
V podstatě maličkost pro toho, kdo se vyzná...
S jiným MCU ne! mám hotovou osazenou desku, programátor a koupené dvacetpětky.

Jen zrekapituluji, o co mi jde: Program nyní umí nepřerušovaný tón, který se dá měnit tlačítky v krocích + - 10Hz.
Potřebuji vyvořit přerušovaný tón a zachovat přitom dolaďování pomocí tlačítek.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
hakamusai



Založen: Apr 17, 2007
Příspěvky: 943

PříspěvekZaslal: so duben 08 2017, 12:41    Předmět: Citovat

Zkusil bych v hlavní smyčce řešit kdy má procesor generovat tón a kdy ne.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



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

PříspěvekZaslal: ne duben 09 2017, 15:49    Předmět: Citovat

Zkus toto
kód:
   
   while(1)
   {
      DDRB |= (1<<2); 
      _delay_ms(160);       // impuls 160 ms
      DDRB &= ~(1<<2); 
      _delay_ms(40);        //  mezera 40 ms
   }                               
 
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jade



Založen: Dec 28, 2004
Příspěvky: 980
Bydliště: Brno

PříspěvekZaslal: ne duben 09 2017, 17:03    Předmět: Citovat

Díky, vyzkouším!!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jade



Založen: Dec 28, 2004
Příspěvky: 980
Bydliště: Brno

PříspěvekZaslal: ne duben 09 2017, 18:21    Předmět: Citovat

Omlouvám se, ale AVR Studio mi hlásí chybu... Cry
kód:
D:\Users\Paul\Documents\default/../Majak2.c:43: undefined reference to `_delay_ms'
D:\Users\Paul\Documents\default/../Majak2.c:45: undefined reference to `_delay_ms'
make: *** [Majak2.elf] Error 1

Co s tím počít, možná něco dělám špatně?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
msar



Založen: Apr 22, 2006
Příspěvky: 300
Bydliště: Hradec Králové

PříspěvekZaslal: ne duben 09 2017, 18:27    Předmět: Citovat

Zkus přidat
kód:
#include <util/delay.h>
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
AB1



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

PříspěvekZaslal: ne duben 09 2017, 18:47    Předmět: Citovat

Napiš začátek takto

kód:

#define F_CPU 3800000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jade



Založen: Dec 28, 2004
Příspěvky: 980
Bydliště: Brno

PříspěvekZaslal: čt duben 13 2017, 10:09    Předmět: Citovat

Děkuji, naprogramovat čip už šel, ale vyskytl se problém. Místo 3720hz mám jen 2904hz a přerušování je sotva 1hz (se stejným krystalem samozřejmě)
Co s tím provésti? Externí krystal se nastavuje jen pojistkou? (v PonnyProg)
Pojistky jsem nastavil CKSEL1 na ON, zbytek OFF (SPIEN je On a nejde změnit)
CKSEL1 by mělo být nastavení pro krystalový oscilátor 3-8Mhz.
Díky!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: čt duben 13 2017, 12:10    Předmět: Citovat

Pro začátek: Jaký je použitý krystal ? Na začátku píšeš 3,93MHz, ve zdrojáku je 3,8Mhz.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jade



Založen: Dec 28, 2004
Příspěvky: 980
Bydliště: Brno

PříspěvekZaslal: čt duben 13 2017, 12:25    Předmět: Citovat

Ve všech konstrukcích majáku, i v prototypu, byl vždycky krystal 3,932160Mhz, nejspíš ten 3,8 nebyl k dispozici.
S tímto krystalem kolega i program "ladil" přes ISP.
Vycházel jsem s toho i u přijímačů, jsou naladěné na 3720hz.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: čt duben 13 2017, 12:56    Předmět: Citovat

Nemůžu se dopočítat frekvence 3720Hz ani v tom původním zdrojovém textu. Předpokládám že je ve fuse nastaven i CKDIV8 ? Ale i tak mi to nevychází.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lesana87



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

PříspěvekZaslal: čt duben 13 2017, 13:03    Předmět: Citovat

Jestli ten program chápu dobře, tak frekvence je hrubě daná sw smyčkou
kód:
   for (i=0;i<72;i++)
   {
      asm( "NOP");
   }

a hw časovačem se jen dolaďuje. Takže záleží, jak to překladač přeloží, jedna instrukce navíc a frekvence je jinde. Z toho plyne i to, že funkce delay_xx() nebudou fungovat správně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jade



Založen: Dec 28, 2004
Příspěvky: 980
Bydliště: Brno

PříspěvekZaslal: čt duben 13 2017, 13:08    Předmět: Citovat

Taky jsme se nemohli dopočítat, možná se stalo, že nejde o poslední verzi zdrojáku. Doteď jsem totiž používal kopie z čipu prototypu, ne nové kompilace.
Údajně by měla jít frekvence zvednout snížováním čísla 72, ale jelikož vůbec netuším k čemu by se mělo vztahovat, tak asi metodou pokus-omyl.
kód:
 for (i=0;i<72;i++)

Edit: Lesana mě předběhla Smile
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, 3  Další
Strana 1 z 3

 
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