Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
#41
(12-25-2014, 11:31 AM)gigabyte091 Wrote: @mikikg,

zanima me kako promjeniti PWM frekvenciju na Attiny MCU, točnije Attiny84.

Htio bih ju podić na 32500 ili više Hz za potrebe step-down pretvarača.

...
Kako se to ručno može podesiti ?
...

E sad još jedno važno pitanje, koji tajmer bi na Attiny84 utjecao na funkcije delay() i ostale ?

Tek sad sam upao na forum pa da napisem koju ako ti je jos aktuelno ovo, prosle godine mi je trebao brzi pwm iz atmega, uz malo trikova koje se daju naci na netu stvar radi. Ima opcija 62.5Khz na 1pinu pwm, sto bi bilo odlicno za neki drajver, ili ako ti treba 2 izlazni u kontra fazi, stim sto mozes softverski da podesavas nezavisno pwm na oba izlaza , meni je to bilo zanimljivo za varijantu STEP-DOWN pretvaraca gde sam umesto donje diode koristio mosfet cime se drasticno smanjuju gubici na vecim strujama jer nema diode na kojoj bi disipirala toplota kada "gura" prema kalemu. Znaci stepdown sa 2 mosfeta na izlazu u kontrafazi, i plus softversko podesavanje koliko ce donji mosfet da vodi kada gornji miruje. Stvar odlicno funkcionise i sto je najbitnije proba radjena sa 12v ulaz, 5v 5Amp izlaz bez ikakvih hladnjaka , jedva primetno da se ista greje, da ne kazem hladno. Kada se setuju tajmeri na ovaj nacin za fast pwm obrati paznju da funkcija DELAY ne radi tacno, za 1sekundu trebas upisati priblizno delay(62000); ako se ne varam, da ne probavam sad posto mi nije na stolu vise uredjaj.


Code:
//******arduino pwm 5 i 6 u kontrafazi*******//
// TEST program //
#define OCR0A pin6
#define OCR0B pin5
#define OCR2A pin11
#define OCR2B pin3
int led = 13;

void setup(){
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(led, OUTPUT);    

//biranje moda > single 62Khz ili dual u kontrafazi na 31Khz.
//TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01) | _BV(WGM00); //62KHz fast pwm
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM00); //31KHz phase shift
TCCR0B = _BV(CS00) ; //set prescaler to 1

   //TCCR0A |= (1 << COM0A1);>  // set none-inverting mode
       //TCCR0A |= (1 << COM0A0); //pin6  invert mode
       TCCR0A |= (1 << COM0B0);   //pin5  invert mode

   // set none-inverting mode

}
int k;
void loop(){

OCR0A = 50;
OCR0B = 100;  // 255 - vrednost

k++;
if(k==95) { k=0; };
  OCR0A=k;

 digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
 delay(5000);               // wait for a second
 digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
 delay(5000);

}

Da ne objasnjavam delove, radi se o test setupu sa fiksnim pwm na jednom izlazu i promenljivim na drugom jer sam testirao ponasanje stepdown i performansi u zavisnosti od toga koliko utice vreme vodjenja tranzistora koji je na masi na iskoriscenje.
Evo i slikice test setupa :
http://www.electronicproducts.com/images...ug2009.gif
Reply
#42
(12-29-2014, 04:19 PM)gigabyte091 Wrote: Da li je bolje uzeti TL431 za izvor referentnog napona ili je bolje koristiti interni 1.1V referentni napon od 328P ?

Htio bih postici sto tocnije mjerenje struje i napona, a sa 1V referencom, 0.1R shuntom mogu mjeriti struju od 10 mA pa navise posto je ADC od 328P 10 bitni


Sto se tice merenja, postoji metoda oversamplinga gde mozes softverski podici rezoluciju citanja, i iako na prvi pogled deluje da nedostatak hardvera nista ne moze nadomestiti ipak sam se licno uverio da stvar u praksi funkcionise ODLICNO !! Radi se o tome da u merenom signalu uvek imas prisutan shum i smetnje koje u oversampling modu budu korisni !
Sistem je da ako zelis da dignes rezoluciju AD konvertora za 2 bita uradis 16 uzastopnih merenja i podelis sa 4, tako da umesto 0-1023 dobijas vrednosti 0-4095.
Vise o tome na :
http://tuxgraphics.org/common/src2/artic...mpling.pdf

Isto ako ti zatreba veca rezolucija za PWM ( po defaultu je svega 8 bita na arduinu), mozes da izvuces 10bita bez problema sa malo podesavanja oko registrija. Meni ovo trebalo za neki stabilisani izvor od pc napajanja  gde sam sa arduinom merio napon na izlazu (12bit) , a preko pwm zatvarao petlju i slao 10bitnu vrednost za pwm nazad na napajanje.
Evo linka:
http://forum.arduino.cc/index.php/topic,41964.0.html

Sa ova 2 tweaka se dobije skroz upotrebljiva naprava za kontrolu nekog napajanja i softversko zatvaranje petlje bez potrebe za hw varijantama. Meni konkretno trebalo za neki punjac za aku.
Reply
#43
@ddanijel sjajno! Slobodno pisi oko tih PWM, ili otvori novu temu, to me veoma interesuje Smile Doduse ja sam nesto vise raspolozen za dsPIC i ARM ali sto da ne ako moze i neko slabije jezgro.
Ja se nesto u poslednje vreme igram sa tim SMPS pretvaracima, ovo sa dva MOS-FET je sinhroni Buck, isto tako se pravi i sinhroni Boost, a ima jos jedno 5-6 topologija koje mogu da se odrade.
Trenutno sam okupiran oko ove analogne verzije ali kako stvari stoje vrlo brzo ce to doci na red i za digitalnu verziju Wink
http://forum.yu3ma.net/showthread.php?tid=10
Reply
#44
Code:
// written by Dylon Jamna (ME!)
// include the library code
#include <EEPROM.h>
#include <LiquidCrystal.h>// include the library code
int tempPin = A0;  // make variables// thermistor is at A0
int led =13; // led is at pin
float temp;  // make a variable called temp
float settemp; // make a variable called temp
int swtu = 7;  // switch up is at pin 7
int swtd = 6;   // switch down is at pin 6
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // lcd is at 12,11,5,4,3,2

void setup() {
 pinMode (led,1);  // make led or pin13 an output
 Serial.begin (9600); // set the serial monitor tx and rx speed
 lcd.begin(16, 2); // set up all the "blocks" on the display
 lcd.setCursor(0,0); // set the cursor to colum 0 row 0
 lcd.print("hello, world!"); // display hello world for 1 second
 lcd.clear(); // clear the lcd
 EEPROM.read (1); // make the eeprom or atmega328 memory address 1
}

void loop() {

 int tvalue = analogRead(tempPin);  // make tvalue what ever we read on the tempPin
 float temp = (tvalue / 25.111111111222222); // the math / conversion to temp
 lcd.setCursor (0,0); // set the cursor to 0,0
 lcd.print (temp);  // Print the current temp in f
 lcd.print ('C');
 Serial.println (temp);  // print the temp it the serial monitor
 settemp = EEPROM.read(1); // read the settemp on the eeprom

 delay (100); // wait for the lcd to refresh every 250 milliseconds

 if             // if we se the switch up pin reading on 1 or 5 volts
   (digitalRead(swtu)== 1 )
 {
   settemp ++  // add one to the settemp, the settemp is the ideal temperature for you
 

     ;
 }

else{// other wise do nothing

}

if
(digitalRead (swtd) == 1)// if we detect a 1 on the other switch pin
{
 (settemp --);// subtract one fromm the settemp

}
else {
// else, do nothing
}

if (temp > settemp) // if the temperature exceeds your chosen settemp
{
 digitalWrite (led, 0); // turn on the led
}
else // if that doesn't happen, then turn the led off
{
 digitalWrite (led,1);
}



lcd.setCursor (0,1); // set the cursor to 0,1
lcd.print ("Set To "); // Print set to and your ideal temperature in f
lcd.print (settemp);
lcd.print ('C');
Serial.println(settemp);  // Print the settemp in the serial montior

EEPROM.write (1,settemp); /* write the most recent settemp in eeprom data stoage
 so that if the power is disconnected, you settemp is saved!*/



delay (100); // wait 250 milliseconds



} // we're done

Našao sam taj kod na internetu i kod radi sve je ok, ali kako da promjenim opseg temperature trenutno je 0-255°C a meni treba preko 300°C?
Reply
#45
Koji ti je senzor u igri ? Inače linija koda koja vrši preračunavanje vrijednosti u temperaturu je: "float temp = (tvalue / 25.111111111222222); // the math / conversion to temp"
Reply
#46
Morao bih malo detaljnije da pogledam program to oko temperature.

Nego jedan ozbiljan bug ima, EEPROM write, to stavio lik u petlju?!
To se nikad tako ne radi, stradace ti memorija posle nekog vremena.
Makar da je stavio citanje i poredjivanje pre pisanja pa da ne pise kad nema potrebe ...
Ili pisanje da se radi u onom delu pgrograma gde se zadata temperatura menja ...
Reply
#47
(09-17-2015, 03:19 PM)gigabyte091 Wrote: Koji ti je senzor u igri ? Inače linija koda koja vrši preračunavanje vrijednosti u temperaturu je: "float temp = (tvalue / 25.111111111222222); // the math / conversion to temp"

Ne znam koliko je bitna vrsta sonde, ja sam pokušavao sa običnim potenciometrom da mjenjam otpor i temperaturu mjenja a pokušavao sam i sa dht11 sondom za temperaturu i vlagu samo moram promjeniti tu vrijednost 'float temp' da bih dobio tačnu temperaturu.?

(09-17-2015, 03:58 PM)mikikg Wrote: Morao bih malo detaljnije da pogledam program to oko temperature.

Nego jedan ozbiljan bug ima, EEPROM write, to stavio lik u petlju?!
To se nikad tako ne radi, stradace ti memorija posle nekog vremena.
Makar da je stavio citanje i poredjivanje pre pisanja pa da ne pise kad nema potrebe ...
Ili pisanje da se radi u onom delu pgrograma gde se zadata temperatura menja ...
Ako treba da postavim i šemu da ti bude jasnije, a ti predloži koje promjene treba uraditi , a meni je potrebno samo povećati opseg temperature  a u ovom kodu nikako ne mogu skontati gdje i kako je upisao opseg temperature.?
Reply
#48
Cela matematika ti je u :
int tvalue = analogRead(tempPin); // AD konverzija 0 - 1023
float temp = (tvalue / 25.111111111222222); // (0 - 1023) / 25.11 = 0 - 40.7

Nigde ovim opseg nije podesen od 0-255, naime ovo je bazirano na ptc sondi i sa ovom matematikom minimalna temp je 0, maximalna je definisana sa rezolucijom AD konvertora i konstantom kojom delis dobijeni rezultat iz AD konvertora. U konkretnom primeru max temp koju moze da prikaze je 1023/25.11 = 40.7c . DHT11 i slicne sonde ne mozes da zakacis na ovo jer se ne radi o analognim senzorima vec je izlaz digitalni. Za to imas gomilu primera po netu kako se koristi. O delu za upis u eeprom je mikikg sve objasnio.
Reply
#49
Da li neko ima neki tekst koji je dobro objašnjen za upravljanje za seven segment sa MAX7219?
Reply
#50
Nešto sam čačkao po našim školama i našao:


Attached Files
.pdf   Arduino uputstvo.pdf (Size: 1,12 MB / Downloads: 68)
.pdf   Arduino i senzori u medicini.pdf (Size: 332,21 KB / Downloads: 20)
.pdf   Arduino LCD + tastatura.pdf (Size: 489,16 KB / Downloads: 22)
Reply
#51
Izašao je novi compiler za arduino...

https://www.b4x.com/b4r.html
Reply
#52
Baš si nešto u zadnje vrijeme mislim da bi napokon možda počeo sa piskaranjem nekakvog koda i izradom nekih low budget/best buy audio stvarčica za malo širu populaciju a ne audiofile(jer njih je teško zadovoljiti :Big Grin ,ali možda se dođe i do tog nivoa). Za početak bi možda išao sa nekom kombinacijom remote volume control i odabir kanala što će dobro doći i meni za DIY uratke. Razmišljam i o nekakvom jednostavnom DACu kojeg bi nekako spojio na Arduino pa da mi arduino glumi USB konverter kojeg vodim kasnije na nekakav DAC. U biti nešto ovakvo http://jlsounds.com/products.html (kombinacija USB>I2S konvertera  i AK4490 DACa) ali možda da nisu podržani high-res fajlovi već samo FLAC da je harver jeftiniji tj. best buy riješenje.

Da sve bi to mogao(i puno više) i sa Raspeberry Pi ali tu imam konkurenciju jer se jedan forumaš gadno prihvatio programiranja i napravio dobre glazbene servere bazirane na toj platformi koji rade samo tako pa tu kombinaciju ostavljam njemu.

E sada ima hrpetina hardvera koliko sam letimično pročitao temu i manje više bilo koji će odraditi tako jednostavan posao a sigurno i malo kompliciraniji. Nekako mi je oko zapelo za Arduino Nano jer je stvarno mali, ima sasvim dovoljan broj ulaza/izlaza. E sada ako bi se igrao i sa DACom koji treba obraditi FLAC možda je Nano malo preslaba mašina za to.
Reply
#53
Pre nekih dve godine, ja sam sa identičnim pristupom krenuo u avanturu sa I2S DAC-ovima. Pošto prilično dobro stojim sa mikrokontrolerima (pre svega Microchip serijom) nekih nedelju dana sam razmišljao na kojoj platformi da baziram modularni audio DAC sa pratećom multimedijalnom podrškom a opet lepim i korisnim korisničkim interfejsom. Nakon tih nedelju dana istraživanja, shvatio sam da je tematika veoma zahtevna naročito u delu korisničkog interfejsa, gde se očekuje odličan HTTP web server, zatim podrška i za ostale formate (MP3 nije nimalo naivna priča, naročito oko licenciranja) tako da je na kraju izbor morao da se svede na neku moćniju mašinu što je najviše naginjalo na Raspberry Pi.
Iako nisam baš drage volje prihvatio "nametnutu" platformu, moram priznati da je veliki broj ljudi, korisnika RPy-ja uticao da se u ovom trenutku ta platforma prilično dobro zaokruži kao solidan izvor zvuka. Pored čestih zamerki da je na RPy clock nedovoljno dobar itd... jednostavno rečeno, to lepo zvuči.
Međutim uz malo više novca dosta drugih platformi (recimo AllWinner A20) je i ovu "anomaliju" ispravilo i nema više razloga zašto se vraćati mnogo slabijim platformama, jer pod Linux-om postoji veliki broj olakšica da bi se zaokružio uređaj koga planiraš da razrađuješ. Pogledaj recimo https://www.musicpd.org/, fantastičan "engine" skoro sve što ti treba oko dekodiranja zvuka, a besplatno Smile

Da ne bih zvučao preterano obeshrabrujuće, ako želiš ipak, da to uradiš na nižem nivou hardvera (firmwarea) pogledaj ovu temu gde smo kolega enaB i ja skockali mali plejer koji je dovoljno jednostavan a sasvim upotrebljiv za tvoju namenu. Bar u delu oko DAC-a. Za FLAC mislim da korišćeni PIC32MX250F128B ima premalo RAM-a, ali WAV sam uspeo da "poteram" bez većih problema.
Pogledaj ovde:
http://forum.yu3ma.net/showthread.php?tid=574
a i ova ti može biti korisna:
http://forum.yu3ma.net/showthread.php?tid=1245

Mislim da je Arduino Nano slaba platforma za ovako nešto. Od Arduino platformi moraćeš da pronađeš neku koja ima neki od ARM Cortex M3 ili M4 mikrokontrolera kako bi uspešno upotrebio neki I2S DAC. Kako su frekvencije MCLK i BCLK kod I2S-a reda više desetina MHZ-a što mora biti podržano na nivou hardvera samog mikrokontrolera. Takođe, velika količina podataka je u pitanju, pa se bez pogovora mora koristiti neki protočni (buffer-ski) deo što opet povlači veće količine RAM memorije itd... pogledaj, siguran sam da se dosta toga može uraditi sa recimo STM32F476 mikrokontrolerom i Discovery pločom koja je prilično povoljna sa cenom (oko 20Eura) a MCU ima u sebi dosta RAM-a, FLASH-a, dosta procesorske snage i konačno na samom Discovery-ju već integrisan DAC solidnih karakteristika Smile U primerima možeš naći već framework za ovaj DAC i primere reprodukcije zvuka.
http://www.st.com/content/st_com/en/prod...overy.html

Srećno...
i piši kako napreduješ, pomoći ćemo koliko nam druge obaveze budu dozvoljavale Smile
Reply
#54
Onda ću za sada uzeti sa ebaya dva Nana(za onu priču oko volume control+selektor ulaza) i početi se igrati sa time a priču oko DACa neka se još samo u teoriji kuha. Imam previše ovećih projekata na kojim radim pa mi previše ulaženja u problematiku oko programiranja kompletnog sučelja i svega toga nikako ne ide pod ruku.

Uzeti ću vjerojatno i ovu malu napravicu http://www.ebay.com/itm/111973934882?_tr...EBIDX%3AIT pa vidjeti kako radi.

Da se malo vratim na DAC, ja bi odmah u startu odustao od korisničkog sučelja na bazi nekog http servera ili nekakav pošteni OS jer čovjek sa Hr foruma je kao što sam rekao tu odradio pošten posao i ne bi se htio miješati. Rađe bi išao na recimo tip playera i sučelja kao što su imali oni prvi mp3 playeri koji su se pojavili(i ipod) znači u suštini kutija u koju upikneš usb,SD card i puštaš muziku sa njega uz veoma jednostavno traženje pjesama kroz foldere. I dodatak bluetooth(koji ima mali bandwith za high res jer mi je već netko napomenu to ovdje na forumu) ali za pustiti nešto nezahtjevnih formata sa mobitela,tableta ili tako nečega bi možda moglo proći. Iz tog razloga ću naručiti onu napravicu sa ebaya da vidim što se sve kroz bluetooth može progurati.

Pogledati ću linkove koje si dao, sada mi je malo prekasno za bilo kakvo detaljnije pručavanje sa razumijevanjem.
Reply
#55
Ovako... da malo nastavim priču sa DACom. Htio bih imati nekakav main board sa kojeg bi vukao I2S signal na DAC. Na mainboardu bi htio sljedeće; bluetooth da se može spojiti mobitel/tablet/ ili nešto slično i sa toga puštati glazba i za zahtjevnije korisnike sa usb sticka čija bi brzina podržavala i nekakve high-ress fajlove. Za samo upravljanje neki rotacioni enkoder sa gumbom i možda kakav univerzalni daljinac, ne bih htio ulaziti u igru sa androidom i upravljanjem na takav način.

E sada da li se može nekakva ploča koju si već gore preporučio podesiti za ovakav način rada, da joj se doda nekakav bluetooth modul i da usb ulaz može raditi kao storage device ili kako bih to već nazvao.
Reply
#56
Možda ovo:

http://www.seeedstudio.com/item_detail.html?p_id=2650

SeeedStudio BeagleBone Green Wireless

Ima WiFi i bluetooth, I2S i 4xUSB
Reply
#57
BeagleBone Green je dobra masinica ali imajte u vidu ovih par bitnih karakteristika ako se uporede sa RPi:

- BB ima jedan ARM procesor a RPi 2/3 ima cetiri
- BB ima specificne dve PRU jedinice, RPi to nema uopste

E sad to treba razmotriti, secam se da je Nebojsin DAC radio svojevremeno i sa jednim ARM procesorom, koliko dobro i koje formate iskreno zaboravio sam, bilo je tu malo problema sa CPU dok smo to vozili sa jednim ARM procesorom i bilo je problema sa Clock koje RPi nije mogao da prevazidje, morali smo druge tipove DAC-ova da koristimo koji su interno radili reclocking.

Sa druge strane BB ima te PRU jedinice koje bi mogle da obezbede stabilan Clock za DAC i tu je onda moguce upotrebiti konvertere iz najvise klase. Nezgodno je sto su te PRU jefinice jedinstvene u tim vodama, samo BB to ima tako da bez adekvatnih drajvera nije moguce to pokrenuti.
Ako je vec neko poterao DAC preko tih PRU jedinicama i imaju drajveri to resenje je dosta bolje od RPi.
Reply
#58
Ovaj je nešto petljao oko toga:


https://hackaday.io/project/9634-linux-b...dio-system
Reply
#59
Za DAC gledam čipac koji se odaziva na ime ES9023, 24bita i može ići do 192kHz uz MCLR od 49,152MHz. Osnovna šema je veoma jednostavna i treba malo okolnih komponenti da radi i kineske varijante dođu do 10$. Ono što mi je zanimljivo je da se i sam čipac može naći za 2$ što bi omogućilo da se napravi kvalitetnija verzija nego od kineza za pristupačnu cijenu jer bolje varijante tog DACa dođu do 50$ što mi se ne uklapa u računicu.
Reply
#60
(07-11-2016, 10:50 AM)mikikg Wrote: E sad to treba razmotriti, secam se da je Nebojsin DAC radio svojevremeno i sa jednim ARM procesorom, koliko dobro i koje formate iskreno zaboravio sam, bilo je tu malo problema sa CPU dok smo to vozili sa jednim ARM procesorom i bilo je problema sa Clock koje RPi nije mogao da prevazidje, morali smo druge tipove DAC-ova da koristimo koji su interno radili reclocking.
 
I dalje je ista situacija, na RPy 2, 3 i dalje nema MCLK.a pa je potreban reclock. Za sada najjednostavniji načini za ovo je korišćenje PCM5102 ili PCM5122 DAC-ova, ili ES9023 sa velikim externim clock-om, kada je moguće koristiti I2S interfejs bez MCLK-a.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)