Sari la conținut

proiect cu Attiny13


titi
 Share

Postări Recomandate

Am un microcontroler Attiny13 si as vrea sa fac cuiva un montaj de reglare a turatiei unui cooler cu temperatura utilizand acest microcontroler. Montajul va fi folosit intr-un PC. Programul as vrea sa-l scriu un C++ sau C dar nu prea stiu daca pot sa fac acest montaj si cu ce sa incep. Ma gandeam sa implementez un generator PWM, o fi bine oare?

 

support.gif

Editat de titi
Link spre comentariu
Distribuie pe alte site-uri

Am un microcontroler Attiny13 si as vrea sa fac cuiva un montaj de reglare a turatiei unui cooler cu temperatura utilizand acest microcontroler. Montajul va fi folosit intr-un PC. Programul as vrea sa-l scriu un C++ sau C dar nu prea stiu daca pot sa fac acest montaj si cu ce sa incep. Ma gandeam sa implementez un generator PWM, o fi bine oare?

 

support.gif

 

nu trebuie sa "implementezi", are microcontrolerul PWM, folsesti un timer intern si un registru dedicat (comparator)

vezi ca e explicat pe larg in datasheet (http://www.atmel.com/dyn/resources/prod_documents/doc2535.pdf pag 58) si sunt exemple pe website la atmel.

pentru temperatura cel mai simplu e sa folosesti un senzor I2C (extern) sau un termistor si ADC-ul.

RR

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

Mersi de raspuns.

 

Initial ma gandeam sa folosesc DS1820 pe post de senzor de temperatura:

http://www.systronix.com/Resource/ds1820.pdf

dar e aproape 10lei unu (cam mult!). Dar pana la urma nu e asta o problema! Sau sa fac ceva cu un termistor? Nu prea am inteles eu bine ce spune acolo la pag.58. Dar mai rasfoiesc, poate,,poate..

Link spre comentariu
Distribuie pe alte site-uri

Prezint mai jos o varianta a programului pentru schema din PDF-ul de mai jos - program realizat in mikroC for AVR. Programul va trebui testat si bineinteles dupa aceea facute optimizarile de rigoare. Precum se observa, am realizat doua generatoare PWM folosindu-ma de referintele preluate prin convertoarele ADC si de cele doua generatoare de semnal implementate. Daca modificam referinta, prin cresterea temperaturii monitorizate de termistoare, se va modifica si factorul de umplere. Cu ajutorul semireglabilelor se stabileste sensibilitatea montajului.

// Program vers.1: Temp reg Attiny13 4MHz.
// by "donpetru" forum.tehnium-azi.ro

#include <built_in.h>
unsigned int adc_rd;
unsigned int adc_rd1;

void main() {

 DDB0_bit = 1;			  // Seteaza PORTB pin 0 iesire PWM0
 DDB1_bit = 1;			  // Seteaza PORTB pin 1 iesire PWM1

 while (1) {
adc_rd = ADC_Read(2);			  // Culege valoarea ADC de la canalul 2 (PB4)
Sound_Init(&PORTB,0);			   // Trasmite semnal pin PB0
Sound_Play(20000, 86400000);   // Semnal 20kHz
DDB0_bit = adc_rd;					// adc_rd+20kHz.
 }
 
 while (1) {
adc_rd1 = ADC_Read(3);			// Culege valoarea ADC de la canalul 3 (PB3)
Sound_Init(&PORTB,1);			   // Trasmite semnal pin PB1
Sound_Play(20000, 86400000);   // Semnal 20kHz
DDB1_bit = adc_rd1;				  // adc_rd+20kHz.
 }
}

 

Fisierul hex pentru prima versiune a programului:

temp_reg_attiny13.rar

Nu am testat practic programul pe microcontroler, dar cred, dupa ce am facut programul, ca la pornire vom avea tranzistoarele BD135 in saturatie. Ramane de vazut acest aspect si daca il vom putea, eu sau altcineva, sa-l eliminam.

 

Si schema, bineinteles:

reg_temp_Attiny.pdf

 

Numai bine

Link spre comentariu
Distribuie pe alte site-uri

Thanks donpetru, am sa testez programul si am sa va spun daca merge. Dupa aia, daca e nevoie, sa ma ajutati sa-l modific.

multe multumuri.

 

Daca as avea patru coolere as putea sa montez doua cate doua in paralel? Si unde este cel mai bine sa montez termistoarele in calculator?

Link spre comentariu
Distribuie pe alte site-uri

Puteti monta doua coolere in paralel cu conditia sa fie "identice" iar curentul cerut de acestea sa fie suportat de un BD135.

Astept sa-mi spuneti cum functioneaza prima versiune a programului. S-ar putea sa fie nevoie sa micsoram frecventa PWM sau sa gasim "o alta solutie soft de comanda", mult mai precisa sau mai potrivita. Dar asta vom stii cu certitudine dupa ce veti face partea practica.

 

Numai Bine, succes si sa vedem rezultatul.

Link spre comentariu
Distribuie pe alte site-uri

Puteti monta doua coolere in paralel cu conditia sa fie "identice" iar curentul cerut de acestea sa fie suportat de un BD135.

Astept sa-mi spuneti cum functioneaza prima versiune a programului. S-ar putea sa fie nevoie sa micsoram frecventa PWM sau sa gasim "o alta solutie soft de comanda", mult mai precisa sau mai potrivita. Dar asta vom stii cu certitudine dupa ce veti face partea practica.

 

Numai Bine, succes si sa vedem rezultatul.

 

 

mi se pare mie sau ai doua bucle infinite una dupa alta, daca intra in prima

while(1){

}

 

nu cred ca mai iese de acolo, ca sa mai intre si in a doua.

 

RR

Link spre comentariu
Distribuie pe alte site-uri

Sound_Play(20000, 86400000); // Semnal 20kHz

donpetru, cred ca la pornirea montajului Bd-urile vor fi in conductie din cauza acestui semnal, care nu se va modifica. Si nu stiu cand sau cum va porni bucla while nr.2!!!!!!!!!!

Cred ca stiu ce ai vrut sa faci, de fapt sa simulezi asta:

post-6950-1266744790_thumb.jpg

E bine, dar cred ca era suficient o singura bucla while, ce spui?

Link spre comentariu
Distribuie pe alte site-uri

@roadrunner, @ciro,

 

Sa stiti ca am testat programul si cu o singura bucla while (este si mai corect) dar din pacate, dupa compilare, mi-a aparut o eroare: pe tipul de microcontroler ales, nu exista suficient RAM EPROM pentru a incarca, respectiv rula programul. Din acest motiv am ales sa realizez doua bucle while. Nu este 100% corect dar am zis, avand in vedere ca este prima varianta a programului, sa-l las asa.

 

Dar, pana la urma, daca se doreste utilizarea Attiny13 si va trebui sa ne limitam la o singura bucla while, atunci practic va trebui sa folosim un singur canal ADC a microcontrolerului si sa comandam un singur BD135. Uitati si vers. 2 a programului, unde se va folosi numai iesirea PB0 si intrarea PB4:

// Program vers.2: Temp reg Attiny13 4MHz.
// by "donpetru" forum.tehnium-azi.ro

#include <built_in.h>
unsigned int adc_rd;

void main() {

 DDB0_bit = 1;	// Seteaza PORTB pin 0 iesire PWM0

 while (1) {
adc_rd = ADC_Read(2);		   // Culege valoarea ADC de la canalul 2 (PB4)
Sound_Init(&PORTB,0);		   // Trasmite semnal pin PB0
Sound_Play(20000, 86400000);	// Semnal 20kHz
DDB0_bit = adc_rd;			  // adc_rd+20kHz.

 }
}

 

Si fisierul HEX:

temp_reg_attiny13_vers.2.rar

 

Numai Bine

Link spre comentariu
Distribuie pe alte site-uri

nu pre am inteles care linie schimba factorul de umplere?

linia asta are numai constante

 Sound_Play(20000, 86400000);	// Semnal 20kHz

iar asta nu atinge PWM-ul ci seteaza o variabila (nu mi-e clar daca "DDB0_bit" e un registru mapat in comparatorul PWM-ului, dupa nume pare Data Direction Port B bit 0)

DDB0_bit = adc_rd;			  // adc_rd+20kHz.

 

deci cum face bucla aia refresh la valorea PWM ca mie-mi scapa?

 

RR

 

PS - greseala cu doua bucle infinite nu are legatura cu nici un microcontroller, e o greseala de programare (de flow)

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

deci cum face bucla aia refresh la valorea PWM ca mie-mi scapa.

Da, aici ai dreptate. scratchchin.gif

Dar ca sa nu-l asteptam pe @titi sa ne spuna cum merge programul, mai bine am sa incerc eu zilele ce vor urma sa le implementez intr-un microcontroler. Ramane sa mai studiez problema, cei drept expusa cam la repezeala. Daca ai vreo solutie, atunci nu ar fi rau sa o expui, asta pentru a scurta timpul pana la realizarea versiunii finale a programului (astfel vom reduce si numarul de versiuni!).

Link spre comentariu
Distribuie pe alte site-uri

Da, aici ai dreptate. scratchchin.gif

Dar ca sa nu-l asteptam pe @titi sa ne spuna cum merge programul, mai bine am sa incerc eu zilele ce vor urma sa le implementez intr-un microcontroler. Ramane sa mai studiez problema, cei drept expusa cam la repezeala. Daca ai vreo solutie, atunci nu ar fi rau sa o expui, asta pentru a scurta timpul pana la realizarea versiunii finale a programului (astfel vom reduce si numarul de versiuni!).

 

casa nu mai inventati apa calda

http://www.atmel.com/dyn/resources/prod_do...nts/doc8005.pdf

 

in ASM http://www.ermicro.com/blog/?p=479

 

 

RR

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

incearca asta l-am simulat si merge, ai si fisierele de simulare cu AVR studio, nu-l am pus pe hardware) compileaza cu AVRGCC

 

#include <avr/io.h>


void pwm_setup(){
 DDRB |= (1<<PB0);			   // make OC0A an output
 TCCR0B = 0;					 // stop timer 0
 TCCR0A = (1<<WGM00)|(1<<WGM01); // select fast pwm mode 3
 TCCR0A |= (1<<COM0A0)|(1<<COM0A1);		  //Clear OC0A on Compare Match when up-counting. Set OC0A on Compare Match when down-counting.
 OCR0A = 0x0;				   //duty cycle
 TCCR0B |= (1<<CS00);			// no prescaling
}


int main(void)
{
pwm_setup(); //initializam PWM pe PB2

//bucla de reglaj
do{
OCR0A = 0x80;	  // asta e linia care schimba duty cycle, aici schimbi turatia
}while(1);


}

 

 

 

aici ai tot proiectul

Tiny_pwm.zip

Editat de roadrunner
Link spre comentariu
Distribuie pe alte site-uri

 

PDFul ala il stiam dar nu ma ajuta prea mult! Macar de postau si ei un program pentru ca pseudocodul nu e suficient. de fapt, din cauza asta am deschis subiectul asta.

Aveti vreo idee practica de program?

 

donpetru, am sa testez ambele programe. daca mai are cineva vreo idee il rog sa mi-o spuna, poate reusim cu toti sa facem ceva practic functionabil.

 

o duminica placuta, acu trebuie sa plec. In cursul saptamanii viitoare am sa fac niste teste.

 

mersi tuturor pt. reply.

 

AM sa probez si programul ala in asm, se pare ca e mult mai apropiat de ce vreau eu sa fac.

Editat de titi
Link spre comentariu
Distribuie pe alte site-uri

@titi, PDF-ul poate nu te ajuta, dar in pagina web unde este prezentat programul in ansambler, cu siguranta acest program te va ajuta. Uite si varianta HEX a acelui program:

attiny.rar

Semireglabilul de acolo poate fi inlocuit cu o rezistenta si un termistor. Poate am sa refac schema cu recomandarile de acolo.. E mai simplu, nu! rolleyes.gif

 

NUMAI BINE

reg_temp_Attiny1.pdf

Link spre comentariu
Distribuie pe alte site-uri

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
 Share

  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.
×
×
  • Creează nouă...

Informații Importante

Folosim cookie-uri și tehnologii asemănătoare pentru a-ți îmbunătăți experiența pe acest website, pentru a-ți oferi conținut și reclame personalizate și pentru a analiza traficul și audiența website-ului. Înainte de a continua navigarea pe www.tehnium-azi.ro te rugăm să fii de acord cu: Termeni de Utilizare.

ATENTIE !!! Functionarea Tehnium Azi depinde de afisarea de reclame.

Pentru a putea accesa in continuoare site-ul web www.tehnium-azi.ro, va rugam sa dezactivati extensia ad block din browser-ul web al vostru. Dupa ce ati dezactivat extensia ad block din browser dati clic pe butonul de mai jos.

Multumim.

Apasa acest buton dupa dezactivarea extensiei Adblock