Mad_Turnip Postat Martie 15, 2011 Autor Partajează Postat Martie 15, 2011 revin cu noutati :)1. am reusit sa-mi procur toate cele necesare pentru inceput, usbasp de la ole, breadboard si niste attiny13, atmega8, atmega32 etc2. am infipt in breadboard un 7805, un attiny13, un led si o rez de 150 pe care le-am alimentat3. am folosit usbasp cu extremburner care nu putea sa-l scrie pentru ca stie doar attiny13A si cu kha nu mai stiu cum care mergea uneori, uneori corupoea continutul etc.hex-urile le compilam cu avr studio insa am unele intrebari1. in project properties scriu frecventa cu care vreau sa mearga avr-ul in Hz, dar cum selectez din avr studio fuse biti-i ? sau cum ii zic sa foloseasca osc intern ? apoi mai era ceva de genul optimisation -o etc2.pentru programare isp cu usbasp montajul trebuie sa fie alimentat sau nu ?3.in timp ce ma jucat cu fuse bitii la un attiny13, selectasem no lock on memory sau further programming, apoi imi da eroarea : error: programm enable: target doesn't answer. 1 initialization failed, rc=-1 Double check connections and try again, or use -F to override this check. ce-i de facut, am blocat attiny13-le ?acum am trecut la un atmega8 , dar vreau sa stiu ce soft pot folosi sa fie usor de inteles, sa scriu codul, setari usoare si inteligibile pentru fuse biti apoi un burner bun cu GUI pentru usbasp.Mersi Link spre comentariu
godFather89 Postat Martie 15, 2011 Partajează Postat Martie 15, 2011 revin cu noutati 1. in project properties scriu frecventa cu care vreau sa mearga avr-ul in Hz, dar cum selectez din avr studio fuse biti-i ? sau cum ii zic sa foloseasca osc intern ? apoi mai era ceva de genul optimisation -o etc Frecventa scrisa la project properties este doar pentru emulator, altfel nu are nici o relevanta. Din AVR Studio, in cel mai bun caz, poti genera un elf care contine setarile pentru fuse biti. Fuse-biti se seteaza din softul cu care programezi microcontrollerul (nu stiu exact ce soft folosesti, dar din cate am inteles, nu avr studio). Toate avr-urile care au osc intern sunt setate din fabrica sa il foloseasca implicit. Optimizarile au legatura cu compilatorul. Recomand folosirea optimizarii s (size - pentru marime). 2.pentru programare isp cu usbasp montajul trebuie sa fie alimentat sau nu ? Da. Orice ISP (in system programmer) presupune ca sistemul cu uc este deja alimentat. 3.in timp ce ma jucat cu fuse bitii la un attiny13, selectasem no lock on memory sau further programming, apoi imi da eroarea : error: programm enable: target doesn't answer. 1 initialization failed, rc=-1 Double check connections and try again, or use -F to override this check. ce-i de facut, am blocat attiny13-le ? Probabil ai setat din greseala fuse-biti pentru ceas extern sau ai dezactivat spi programming. Se poate rezolva cu un programator HVP. acum am trecut la un atmega8 , dar vreau sa stiu ce soft pot folosi sa fie usor de inteles, sa scriu codul, setari usoare si inteligibile pentru fuse biti apoi un burner bun cu GUI pentru usbasp. AVR Studio 5 mi se pare foarte bun fata de versiunea anterioara. Soft pentru usbasp nu stiu sa iti recomand. Auzisem de avrdude care are si un GUI. Mersi N-ai pentru ce Link spre comentariu
Mad_Turnip Postat Martie 15, 2011 Autor Partajează Postat Martie 15, 2011 si daca setarea oscilatorului de acolo nu are valoare pentru programator, eu de unde stiu la cat este setat avr-ul ? din cate stiam de exemplu cand ii scriu un delay, la compilare hex-ul este calculat in functie de setarea vitezei oscilatorului. ma insel ? daca softul nu compileaza in functie de acea valoare ..... din fusebiti stiam ca pot seta oscilator intern sau extern, dar valoarea lui cum o setez ? Link spre comentariu
godFather89 Postat Martie 15, 2011 Partajează Postat Martie 15, 2011 Clock-ul AVR-ului la nivel hardware este setat din fuse-biti.Da, s-ar putea ca frecventa care o scrii la properties sa fie definita si ca F_CPU la compilator (-DF_CPU=frecventa ca parametru la compilator), F_CPU de care tine cont calculul pentru functiile de delay din util/delay.h. Asta nu inseamna ca daca tu scrii acolo 10MHz avr-ul tau chiar va fi tactat cu frecventa aia, inseamna doar ca delay-ul va fi calculat pentru valoarea de 10 MHz. Pentru setarile hardware la ceasul avr-ului, trebuie umblat la fuse-biti.LE: Apropo de optimizari, functiile de delay functioneaza doar cu optimizarile pornite. Link spre comentariu
ramsesrr Postat Martie 16, 2011 Partajează Postat Martie 16, 2011 Ca soft pt usbasp recomand eXtreme Burner - AVR http://extremeelectronics.co.in/avr-tut ... ogrammers/ Link spre comentariu
Mad_Turnip Postat Martie 16, 2011 Autor Partajează Postat Martie 16, 2011 pai pe asta am ajuns sa-l folosesc cu atmega8, cu attiny13 facea figuri ca nu e attiny13a, insa pt fuse biti prefer khazam pentru ca sunt in clar si mult mai usor de inteles. Link spre comentariu
Mad_Turnip Postat Martie 16, 2011 Autor Partajează Postat Martie 16, 2011 am ajuns sa interfatez un lcd hd44780 de 4x20 si libraria era setata pe PORTC, insa observ ca atmega8 nu are ca toate celelalte 8 pini, are maxim PORTC6, intrebarea este de ce unele porturi nu au acelasi numar de pini ca restul, de ce nu sunt pe 8 pini. ce rezulta de aici, cu ce ma ajuta, cu ce ma incurca, ce anume trebuie sa setez ca sa-i folosesc ca pini normali ? Link spre comentariu
Mad_Turnip Postat Martie 21, 2011 Autor Partajează Postat Martie 21, 2011 in weekend am mai aprofundat despre operatori si an invatat treaba cu PORT, DDR si PIN. Am reusit prin diverse modificari sa aprind un led daca un buton este apasat, insa nu cred ca am gasit exact cum se verifica starea unui pin.ceva info legat de IF si starea unui pin ? de asemenea am reusit si afisarea pe un lcd a diverselor cuvinte in functie de buton, daca este apasat sau nu, dar pentru ca lcd_puts era in bucla while, cliparea frustrant textul - de la refreshul pe care il facea bucla.cum pot afisa informatiile pe lcd, in functie de niste IF-uri, fara sa-i fac refresh tot timpul ? Link spre comentariu
godFather89 Postat Martie 21, 2011 Partajează Postat Martie 21, 2011 ceva info legat de IF si starea unui pin ?Trebuie sa fie setat pinul ca si input (0 in bit-ul corespunzator din DDRx). Verificare se face pe bitul corespunzator din PINx. Practic se verifica daca nivelul tensiunii corespunde unui 0 sau 1 logic.if (PINx & (1 << nr_pin)) //pinul este 1 logicelse //pinul este 0 logic cum pot afisa informatiile pe lcd, in functie de niste IF-uri, fara sa-i fac refresh tot timpul ?Folosesti o variabila de stare iar refresh-ul LCD-ului il faci doar cand starea se modifica.ceva de genul:uint8_t stare = 0;uint8_t refresh = 1;....while (1){ if (buton1_apasat()) { if (stare != 1) { stare = 1; refresh = 1;}} else if (buton2_apasat()) { if (stare != 2) {stare = 2; refresh = 1;}} else {stare = 0; refresh = 1;} if (refresh) { refresh = 0; switch (stare) { case 0: printf("Liber"); break; case 1: printf("But 1 apsat"); break; case 2: printf("But 2 apsat"); break; } }}LE: Era o mica eraore in cod, am modificat Link spre comentariu
Mad_Turnip Postat Martie 21, 2011 Autor Partajează Postat Martie 21, 2011 pe portC am un lcd hd44780, portD0 am pus un senzor PIR si am scris asa: #include<avr/io.h>#include <hd44780.h>uint8_t refresh = 0;int main(void){lcd_init();lcd_clrscr();DDRD = 0b00000010;PORTD = 0b00000001;while(1){ if (PIND & (1 << PD0)){ PORTD = 0b00000011; refresh = 1; } else { PORTD = 0b00000001; refresh = 0;}if(refresh ==1){ lcd_puts("SENZORI");}}} ideea este ca atunci cand se activeaza PIR-ul, scrie pe lcd, dar scrie continuu SENZORISENZORI etc. cum il fac sa afiseze doar o singura data. apoi ma gandeam ca lcd_puts sa-l construiesc din variabilele care se vor seta din program. ceva idei ? Link spre comentariu
godFather89 Postat Martie 21, 2011 Partajează Postat Martie 21, 2011 nu ai si o functie gen lcdGotoXY(0,0); ? Link spre comentariu
Mad_Turnip Postat Martie 22, 2011 Autor Partajează Postat Martie 22, 2011 folosesc libraria lui Peter Fleury. am un lcd_goto() care merge pe prima linie pana la 20, apoi daca ii dau 40 este pe linia a 2-a, insa pe celelalte 2 linii, 3 si 4 nu stiu cum sa-l fac sa ajunga. nu a mers cu lcd_goto(60);cum fac sa ajunga si pe randurile 3 si 4 ? Link spre comentariu
Mad_Turnip Postat Martie 22, 2011 Autor Partajează Postat Martie 22, 2011 alta problema legata de o tastatura de 4x3. pentru ca nu am gasit o librarie am zis ca nu este chiar atat de greu sa verifici ce pin este la GND si o bucla de if-uri. coloanele le-am conectat la PB0, PB1 si PB2, liniile la PB3, PB4, PB5 si PB6. am scris functia de mai jos gandindu-ma ca: DDRB este 0b00000111 - deci PB0, PB1 si PB2 sunt setate ca OUT si restul IN ca sa pot citi linia. apoi pe rand am facut PB0 la GND, in momentul asta liniile avand activat internal pull-up, deci au nivel 1, in momentul cand cineva apasa pe 1, aduce nicelu de la PB0 care e GND la PB3 si deci PB3 va fi 0 deoarece e la GND. cu ce gresesc ? nu imi ies if-urile ... char kb_read(){ PORTB = 0b01111110; if ((PORTB | (1<<3)) >>3){ k = "1"; } if ((PORTB | (1<<4)) >>4){ k = "4"; } if ((PORTB | (1<<5)) >>5){ k = "7"; } if ((PORTB | (1<<6)) >>6){ k = "*"; } PORTB = 0b01111101; if ((PORTB | (1<<3)) >>3){ k = "2"; } if ((PORTB | (1<<4)) >>4){ k = "5"; } if ((PORTB | (1<<5)) >>5){ k = "8"; } if ((PORTB | (1<<6)) >>6){ k = "0"; } PORTB = 0b01111011; if ((PORTB | (1<<3)) >>3){ k = "3"; } if ((PORTB | (1<<4)) >>4){ k = "6"; } if ((PORTB | (1<<5)) >>5){ k = "9"; } if ((PORTB | (1<<6)) >>6){ k = "#"; } return k;} Link spre comentariu
Mad_Turnip Postat Martie 22, 2011 Autor Partajează Postat Martie 22, 2011 am reusit asa: char kb_read(){ k = ""; PORTB = 0b01111110; if (bit_is_clear(PINB, 3)){ k = "1"; } if (bit_is_clear(PINB, 4)){ k = "4"; } if (bit_is_clear(PINB, 5)){ k = "7"; } if (bit_is_clear(PINB, 6)){ k = "*"; } PORTB = 0b01111101; if (bit_is_clear(PINB, 3)){ k = "2"; } if (bit_is_clear(PINB, 4)){ k = "5"; } if (bit_is_clear(PINB, 5)){ k = "8"; } if (bit_is_clear(PINB, 6)){ k = "0"; } PORTB = 0b01111011; if (bit_is_clear(PINB, 3)){ k = "3"; } if (bit_is_clear(PINB, 4)){ k = "6"; } if (bit_is_clear(PINB, 5)){ k = "9"; } if (bit_is_clear(PINB, 6)){ k = "#"; } return k;} Link spre comentariu
Mad_Turnip Postat Martie 22, 2011 Autor Partajează Postat Martie 22, 2011 intampin niste erori. linia cu 1 2 3 este in alta ordine, iar linia cu * 0 si # nu merge deloc. din cate am vazut PB6 nu reactioneaza. atingand cu mana pinii de input de la liniile tastaturii am vazut ca este destul pentru a reactiona. pull-up-ul nu trebuia sa scape de problema asta ?DDRB este 0b00000111 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