Sari la conținut
ELFORUM - Forumul electronistilor

inceput de ATMEL


Mad_Turnip

Postări Recomandate

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
  • Răspunsuri 36
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Mad_Turnip

    20

  • godFather89

    10

  • yo9hnf

    2

  • nana

    1

Top autori în acest subiect

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

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

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

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

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

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

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

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

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

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

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

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

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



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări