nickrvl Postat Decembrie 30, 2010 Partajează Postat Decembrie 30, 2010 Vreau sa misc un motor, PWM, cu ajutorul unui ATtiny24, problema e ca nu m-am jucat nici odata cu pwm-ul dintr-un Mcu, deci nu stiu cum se aplica, ceva ceva am mai incercat dar e nesemnificativ. Am o mica placa de dezvoltare la care e atasat un lcd(provizoriu) doua butoane si un potentiometru, rotind acel potentiometru sa pot regla factorul de umplere si doar cind apas unul din butoane sa am la un pin PWM. Ca sa fie si mai clar, potentiometrul e legat la PA6 (ADC6), butonul e la PB3 si un led deocamdata "clipoceste" la PB2, adica aici doresc pwm. Schema la placa cam asta ar fi:[attachment=0]pda.pdf[/attachment]Deocamdata doar pwm-ul acela m-ar interesa, sa pot sa-l reglez......Acum lucrez cu oscilator intern, 8Mhz, dupa ce reusesc sa-l misc probabil ca o sa-i pun unul extern, ce frecventa pot scoate la 8 MHz? Link spre comentariu
mitescu Postat Decembrie 30, 2010 Partajează Postat Decembrie 30, 2010 in exemplul de mai jos initializarile sunt : ADCD-ul cu referinta interna 1,1V ( trebuie modificata rezistenta de 10K care este inseriata cu pot.), frecventa de 250khz. se utilizeaza numai 8 biti.(msb) PWM-ul este la timer0 care are clock-ul de 1Mhz In bucla valoarea citita de la potentiometru este swcoasa la pwm, acesta urmarind valoarea. #include <tiny24.h>#include <delay.h>unsigned char read_adc(unsigned char adc_input){ADMUX=adc_input | 0xC0;delay_us(10);ADCSRA|=0x40;while ((ADCSRA & 0x10)==0);ADCSRA|=0x10;return ADCH;}void main{PORTB=0x00;DDRB=0x04;TCCR0A=0x81;TCCR0B=0x02;DIDR0=0x40;ADMUX=0xC0;ADCSRA=0x85;ADCSRB&=0x7F;ADCSRB|=0x10; while (1) { OCR0A=read_adc(6); };} Link spre comentariu
nickrvl Postat Decembrie 30, 2010 Autor Partajează Postat Decembrie 30, 2010 Am uitat sa specific, ma pricep doar in bascom, multumesc oricum .... Pina acum cel mai bun rezultat l-am obtinut cu asta, "babeste" desigur: $regfile = "ATtiny24.dat"$crystal = 8000000Config Portb.2 = 1Config Portb.0 = 1Dim A As WordDim Aa As WordDim B As WordDim Bb As WordDim X As WordDim Y As WordA = 0B = 0Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADCStart AdcDoBb = 1000 / 7Aa = Getadc(6)Aa = Aa / 7Bb = Bb - AaDoIncr APortb.2 = 1Portb.0 = 1Waitus 1Loop Until A => AaA = 0DoIncr BPortb.2 = 0Portb.0 = 0Waitus 1Loop Until B => Bb B = 0Loop'924EndCu tentativa asta de program am pwm cu factor de umplere de 0 (aproape) pina la 80% (cred) si o frecventa de 914 Hz ,de asemenea cred, pentru ca nu am frecventmetru, am unul facut de mine dar nu-l am calibrat. Ca si frecventa m-ar multumi maxim 80KHz. Potentiometrul, RV1, l-am pus de 100k. Mai jos poze cu oscilscopul si un led, cel galben, care se aprinde in "ritm" cu pwm-ul. [attachment=3]DSC02963.JPG[/attachment] [attachment=2]DSC02964.JPG[/attachment] [attachment=1]DSC02965.JPG[/attachment] [attachment=0]DSC02966.JPG[/attachment] Printre altele, pe net am gasit si urmatorul exepmlu : Dim A As WordDim B As WordConfig Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 8Config Pinb.2 = OutputDoFor A = 255 To 0 Step -1Pwm1a = AWaitms 100NextFor A = 0 To 255Pwm1a = A'Waitms 100NextLoopEnd insa la mine nu vrea.... Link spre comentariu
nickrvl Postat Decembrie 30, 2010 Autor Partajează Postat Decembrie 30, 2010 Am reusit ceva ceva, cu asta obtin pwm cu factor de umplere 50% la 160Khz, acum sa vedem cum il fac reglabil. $regfile = "ATtiny24.dat"$crystal = 8000000 Dim Dummy As Integer Dim Potvalue As Integer Dim A As Word Config Pinb.1 = Output Config Pinb.0 = Output'Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC'Start AdcConfig Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1Start Timer1Pwm1a = 100Pwm1b = 200DoIf Pwm1a = 100 Then Portb.2 = 1 Portb.0 = 1 End IfIf Pwm1b = 200 Then Portb.2 = 0 Portb.0 = 0 End If Loop End Link spre comentariu
nickrvl Postat Decembrie 31, 2010 Autor Partajează Postat Decembrie 31, 2010 Acum nu mai pot accesa ADC-ul, am pwm insa daca vreau sa citesc valoarea lui ADC(6) si sa o afisez pe lcd o ia razna, nici pe lcd nu-mi apare ceva, doar caractere care defileaza haotic, si nici nu ia o valoare oarecare, am testat pe osciloscop. $regfile = "ATtiny24.dat"$crystal = 8000000 Dim Dummy As Integer Dim Potvalue As Integer Dim A As Word Dim B As Word Config Pinb.1 = Output Config Pinb.0 = Output Config Porta.6 = InputConfig Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , Rs = Porta.5 , E = Porta.4Config Lcd = 16 * 2Cursor OffClsConfig Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 64Pwm1a = 100Pwm1b = 200Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADCStart AdcDoA = Getadc(6)Cls Locate 1 , 1 Lcd A ; " " 'Waitms 100If Pwm1a = 100 Then Portb.2 = 1 Portb.0 = 1 End IfIf Pwm1b = 200 Then Portb.2 = 0 Portb.0 = 0 End If Loop End Link spre comentariu
nickrvl Postat Ianuarie 1, 2011 Autor Partajează Postat Ianuarie 1, 2011 Acum merge si ADC si PWM in buna pace si intelegere.... Deocamdata acesta e codul si functioneaza, cu buton start si afisare adc pe lcd, sa vad mai departe cum fac... Totusi am ceva necunoscute, acest "Ocr0a" e responsabil cu out pwm pe oricare port care e configurat pe out? adica daca cofigurez tot portul b pe out o sa am pwm la toti pinii b? $regfile = "ATtiny24.dat"$crystal = 8000000Config Pinb.2 = Input 'out pwm, initial e pe input..Config Pinb.0 = Input 'start/stopConfig Pinb.1 = InputPortb.0 = 1Portb.1 = 1Config Porta.6 = InputConfig Timer0 = Pwm , Pwn = 8 , Compare A Pwm = Clear Up , Prescale = 8Enable Timer0Enable InterruptsConfig Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , Rs = Porta.5 , E = Porta.4Config Lcd = 16 * 2Cursor OffClsConfig Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADCStart AdcDim C As WordDim B As WordDim D As WordDim Z As LongDim Salt As ByteSalt = 0DoB = Getadc(6)Locate 1 , 1Lcd B ; " "B = B / 4D = BLocate 2 , 1Lcd D ; " "If Pinb.0 = 0 Then Locate 1 , 6 Lcd "START " B = Getadc(6) Locate 1 , 1 Lcd B ; " " B = B / 4 D = B Locate 2 , 1 Lcd D ; " " Ocr0a = D Config Portb.2 = OutputEnd IfIf Pinb.0 = 1 Then Locate 1 , 6 Lcd "STOP " Config Portb.2 = InputEnd IfLoop Link spre comentariu
nickrvl Postat Ianuarie 1, 2011 Autor Partajează Postat Ianuarie 1, 2011 Pot sa dezactivez cumva reset-ul care este Pinb.3 la acest attiny24? vreau sa folosesc pinb.3 ca iesire, insa oricum l-asi configura atunci cind leg un led la acest pin reseteaza MCU. Link spre comentariu
nickrvl Postat Ianuarie 4, 2011 Autor Partajează Postat Ianuarie 4, 2011 Pot sa dezactivez cumva reset-ul care este Pinb.3 la acest attiny24? vreau sa folosesc pinb.3 ca iesire, insa oricum l-asi configura atunci cind leg un led la acest pin reseteaza MCU.Gresesc eu pe undeva? cumva acel pb3 trebuie sa poata fi folosit. Nu e indeajuns sa-l setez astfel "CONFIG PORTB.3 = OUTPUT/INPUT" si astfel sa am acces la el? cum am mai zis are efect doar resetul..... Link spre comentariu
Vizitator Postat Ianuarie 6, 2011 Partajează Postat Ianuarie 6, 2011 ...Nu e indeajuns sa-l setez astfel "CONFIG PORTB.3 = OUTPUT/INPUT" si astfel sa am acces la el?Nu e suficient. Daca vrei sa folosesti pinul de RESET la altceva decat RESET atunci trebuie sa umbli la fusebits. Asta se face cu ajutorul programatorului, nu din limbajul de programare. Din fabrica setarile sunt ca pinul respectiv sa aiba functia de Reset. E bine ca atunci cand ceva nu iti iese sa cauti si in manual. Uite ce zice aici: http://www.atmel.com/dyn/resources/prod ... oc8006.pdf chiar la pagina 2: To use pin PB3 as an I/O pin, instead of RESET pin, program (‘0’) RSTDISBL fuse.Adica trebuie sa-l faci zero pe RSTDISBL (ReSeT DISaBLe) sau, sa programezi RSTDISBL, cum se mai spune. Din fabrica setarile sunt ca pinul respectiv sa aiba functia de Reset, adica RSTDISBL fuse este 1. Schimbarea lui RSTDISBL sau al oricarui alt fuse(bit) se face cu ajutorul programatorului, nu din limbajul de programare. !!! Atentie, daca dezactivezi resetul nu mai poti sterge, citi sau reprograma MCU-ul decat cu un HIGH VOLTAGE PROGRAMMER. Daca nu ai asa ceva lasa pinul RESET sa fie reset, altfel iti tai singur craca de sub picioare. MCU-ul are nevoie de pinul RESET pentru a comunica cu programatorul. Link spre comentariu
nickrvl Postat Ianuarie 7, 2011 Autor Partajează Postat Ianuarie 7, 2011 Nu e suficient. Daca vrei sa folosesti pinul de RESET la altceva decat RESET atunci trebuie sa umbli la fusebits. Asta se face cu ajutorul programatorului, nu din limbajul de programare. Din fabrica setarile sunt ca pinul respectiv sa aiba functia de Reset. E bine ca atunci cand ceva nu iti iese sa cauti si in manual. Uite ce zice aici: http://www.atmel.com/dyn/resources/prod ... oc8006.pdf chiar la pagina 2: To use pin PB3 as an I/O pin, instead of RESET pin, program (‘0’) RSTDISBL fuse.Adica trebuie sa-l faci zero pe RSTDISBL (ReSeT DISaBLe) sau, sa programezi RSTDISBL, cum se mai spune. Din fabrica setarile sunt ca pinul respectiv sa aiba functia de Reset, adica RSTDISBL fuse este 1. Schimbarea lui RSTDISBL sau al oricarui alt fuse(bit) se face cu ajutorul programatorului, nu din limbajul de programare. !!! Atentie, daca dezactivezi resetul nu mai poti sterge, citi sau reprograma MCU-ul decat cu un HIGH VOLTAGE PROGRAMMER. Daca nu ai asa ceva lasa pinul RESET sa fie reset, altfel iti tai singur craca de sub picioare. MCU-ul are nevoie de pinul RESET pentru a comunica cu programatorul. Multumesc frumos pentru lamuriri, sint "primite" si reprosurile...asta e, daca nu ma prea pricep cer lamuriri, oricum, nu ca ar conta insa m-am uitat si in datasheet am vazut si acea rubrica insa se vede ce am priceput, o fi engleza mea de vina... nu stiu, multumesc inca o data oricum. Decind cu atmega8 (in sensul ca nu se mai fabrica) voiam sa testez si alt MC-uri relativ ieftine si sa faca si multe, ma gindeam la aplicatii gen voltmetre la care mai aveam nevoie de pini si de aici intrebarea cu pinul de reset... Pentru aplicatia de mai sus m-am descurcat "onorabil" fara acel pin, asta in prima varianta a aplicatiei, ramine de vazut in celelalte... Acum lamureste-ma si cu acel "HIGH VOLTAGE PROGRAMMER", se poate si programa cu el sau e folosit doar la deblocat, se poate face asa ceva sau mai bine se cumpara... Link spre comentariu
Vizitator Postat Ianuarie 7, 2011 Partajează Postat Ianuarie 7, 2011 Nu e repros, e recomandare. Altfel iti scriam doar "RTFM!" si nu mai explicam nimic. High Voltage Programmer se poate folosi si la deblocari si la programari, depinde de model. Poti sa-ti faci sau sa-ti cumperi, dupa cum preferi. Mai sunt numite si Parallel Programmer. Vezi ca daca programatorul tau foloseste portul paralel (LPT-ul sau portul de imprimanta) din calculator nu inseamna neaparat ca ai un programator paralel. Parallel Programmer inseamna ca atunci cand programatorul vorbeste cu MCU-ul o face (in paralel) pe mai multe sarme deodata, nu doar serial cum se face la programatoarele care folosesc doar CLK/MOSI/MISO/RESET/GND.Acum, ca sa intelegi cum se varsa softul scris de tine din PC in MCU.Lucrurile se intampla cam asa: mai intai se alimenteaza MCU-ul, nu? Dar daca alimentezi un MCU atunci el incepe sa ruleze ce program o avea deja in burta lui. Pai, daca ruleaza inseamna ca nu are nici timp nici chef sa vorbeasca cu programatorul. Ca sa iasa din situatia asta programatorul trebuie sa il intrerupa cumva din executie pe MCU. Si atunci ce face programatorul? Ii da un Reset MCU-ului (folosind bineinteles pinul de Reset) ca sa il opreasca din executie si sa poata incepe sa vorbeasca cu el. Pana aici toate bune si frumoase, dar ce ne facem daca pinul RESET nu mai exista pentru ca noi tocmai l-am transformat zilele trecute intr-un pin general de I/O (intrare/iesire).In cazul asta programatorul aplica o tensine de 12 V pe fostul pin de Reset. Astfel MCU-ul stie ca programatorul vrea sa vorbeasca cu el si se opreste din ce executa. Desi 12 V e mult mai mare decat tensiunea maxima de alimentare a MCU-ului totusi el nu se arde pentru ca asa a fost gandit. Nu se pune tot MCU-ul la 12V, doar pinul de RESET, care e singurul pin construit sa reziste pana la 13V.In concluzie High Voltage Programmer inseamna un programator care aplica 12V pe pinul (sau fostul pin) RESET. Link spre comentariu
nickrvl Postat Ianuarie 8, 2011 Autor Partajează Postat Ianuarie 8, 2011 High Voltage Programmer se poate folosi si la deblocari si la programari, depinde de model....Mai mult decit suficienta explicatia, in cazul meu, cu programator ISP, ar trebui sa ma asigur ca softul e in regula si abea in ultima instanta sa dezactivez reset-ul, deocamdata nu e cazul dar e bine de stiut.Mai departe o captura din Bascom cu setare fusebits si unde cred eu ca trebuie "umblat" pentru dezactivat reset, default e "1=External reset enable"[attachment=0]reset.jpg[/attachment]Cumva acel High Voltage Programmer "vede" si Mcu-rile blocate de noi din greseala cu programator ISP?Si de asemenea High Voltage Programmer nu cred ca e vazut de Bascom....Foloseste cineva High Voltage Programmer? ceva detalii/poze pentru a-mi face o idee?Informatii de acest gen sint aur pentru incepatori ca mine si nu numai. Link spre comentariu
Vizitator Postat Ianuarie 8, 2011 Partajează Postat Ianuarie 8, 2011 ...ar trebui sa ma asigur ca softul e in regula si abea in ultima instanta sa dezactivez reset-ul, deocamdata nu e cazul dar e bine de stiut.Mai departe o captura din Bascom cu setare fusebits si unde cred eu ca trebuie "umblat" pentru dezactivat reset, default e "1=External reset enable" Ai inteles foarte bine. Cumva acel High Voltage Programmer "vede" si Mcu-rile blocate de noi din greseala cu programator ISP?Depinde de programator, de MCU si de modul in care a fost blocat. De obicei da. Referitor la modurile in care se poate bloca un MCU, dezactivarea reset-ului este doar una dintre ele, mai exista si altele cum ar fi de exemplu sa setezi gresit optiunile pentru oscilatorul MCU-ului. Daca lasi MCU-ul fara oscilator atunci nu mai functioneaza nici interfata ISP. Si de asemenea High Voltage Programmer nu cred ca e vazut de Bascom....STK500 e un programator care poate programa si in modul high voltage. STK500 e vazut de BASCOM.Uite ce zice manualul lui STK500 despre programarea in modul high voltage la pagina 21 din fisier: http://www.atmel.com/dyn/resources/prod ... oc1925.pdf Am scris eu neclar in postul anterior, programarea in modul high voltage nu inseamna neaparat programare in mod paralel. La MCU-urile cu 8 pini se foloseste 12V la reset si programarea se face serial, nu paralel. Vad in captura ca folosesti un programator compatibil STK. De fapt ce programator ai? Link spre comentariu
nickrvl Postat Ianuarie 8, 2011 Autor Partajează Postat Ianuarie 8, 2011 ....Vad in captura ca folosesti un programator compatibil STK. De fapt ce programator ai?Acesta:[attachment=0]prog.pdf[/attachment]Mai inainte am avut unul simplu, acela doar cu rezistente, care a mers binisor pina cind am avut de programat un attiny2313 pentru un frecventmetru care avea un cuartz de 20Mhz, pina mi-a-si da seama ca e de vina programatorul si de aia nu pot programa am blocat vre-o 5 attiny parca. Cu acesta nu numai ca mi-a mers din prima dar i-si face treaba cu brio mai departe, acum insa parca m-ar bate gindul la acel "High Voltage Programmer",sa nu mai am grija blocarii din cauza setarii frecventei gresit, macar...Insa am gasit ceva, daca merge ce zice acolo sa fie oare "sfintul gral" al deblocarii MCU-rilor?http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/ Link spre comentariu
Vizitator Metalshrine Postat Martie 7, 2011 Partajează Postat Martie 7, 2011 Raspuns la o intrebare anterioara: PWM iese doar pe pinul OC1 sau 2 sau 3 sau...output. Acela este oglinda Output Compare Register, adica un registru de comparatie intre timer/counter si o valoare data din soft sau citita din hard. Cand cele 2 valori devin egale, pinul OC isi schimba starea in cea opusa. Deci nu poti scoate PWM pe orice pin doresti.Sfat pentru mai mult incepatori (printre care si eu): cititi cu atentie datasheetul ca acolo se explica absolut totul. Mai putin fineturile, dar alea se pot invata pe parcurs. Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum