Sari la conținut
ELFORUM - Forumul electronistilor

Probleme de incepatori


Postări Recomandate

Sunt incepator in programare avr....( C ) si acum ma joc cu un mega16 si 5 leduri.

problema mare e ca eu am sarit peste niste pasi am inceput exact cu ce e mai frumos(practica)

am ajuns la instruciunea FOR si nu prea stiu cum sa o aplic si unde, am inteles eu c-am ce ar face.

Daca ma poate ajuta cineva as fi recunoscator

 

while (1)

 

{

 

 

 

{

PORTD.0=1;

delay_ms(500);

PORTD.0=0;

delay_ms(500);

 

}

 

 

}

 

for(n=0 ;n>5; n++);

 

nu stiu unde trebuie pusa ca sa aprind un led de 5 ori si pe urma sa stea stins sau aprins

cum o fi

Sunt incepator in programare avr....( C ) si acum ma joc cu un mega16 si 5 leduri.

problema mare e ca eu am sarit peste niste pasi am inceput exact cu ce e mai frumos(practica)

am ajuns la instruciunea FOR si nu prea stiu cum sa o aplic si unde, am inteles eu c-am ce ar face.

Daca ma poate ajuta cineva as fi recunoscator

 

while (1)

 

{

 

 

 

{

PORTD.0=1;

delay_ms(500);

PORTD.0=0;

delay_ms(500);

 

}

 

 

}

 

for(n=0 ;n>5; n++);

 

nu stiu unde trebuie pusa ca sa aprind un led de 5 ori si pe urma sa stea stins sau aprins

cum o fi

 

sa incepem cu inceputul:

1. probabil headerele si functia main le-ai scris deja daca nu va trebui sa le scrii inainte de codul pe care l-ai postat.

2. in while ai un grup { } inutil. nu influenteaza codul dar e pus degeaba si poate fi derutant pentru incepatori.

3. for-ul este pus in afara while-ului si are ; dupa el deci nu face nimic util in afara de a ocupa 5 cicluri de procesor, asta in cazul in care ar fi corect scris. asa cum e scris acum nu intra in for deoarece n=0 si nu e mai mare ca 5.

 

un cod corect ar arata ceva de genul:

#include <avr/io.h>#include <util/delay.h>int main(){DDRD|=(1<<PD0); while(1)  {PORTD|=(1<<PD0);   _delay_ms(500);   PORTD&=~(1<<PD0);  _delay_ms(500); } return 0;}
sau daca vrei sa clipeasca de 5 ori apoi sa stea aprins:

#include <avr/io.h>#include <util/delay.h>int main(){DDRD|=(1<<PD0); for(uint8_t i=0;i<5;i++)  {PORTD|=(1<<PD0);   _delay_ms(500);   PORTD&=~(1<<PD0);  _delay_ms(500); } PORTD|=(1<<PD0); while(1); return 0;}
Link spre comentariu

Din pacate nu se poate pentru ca tipu da doar hex-ul gata compilat nu si codul in sine iar 2 trebuiesc facute modificari la toata schema in principal la etaju de putere se mai pune in paralel un tranzistor de putere si se redimensioneaza etajul de comanda a tranzistorilor folositi in bucla de stabilizare. In principiu se modifica din schema lu ala ceea de digitala R4-R7 si respectiv R2-R8 dar na acolo vin niste calcule facute si in acel proiect eu nu am gasit si partea de analogic ca sa iti zic mai multe.

Link spre comentariu
  • 2 săptămâni mai târziu...

Buna seara,

 

Am un sistem 5.1 genius in care s-a ars controleru (SN8P2714SB) si negasind acest controler incerc sa-l inlocuiesc cu Atmega8.

In mare am reusit sa scriu programul problema aparand la reglarea volumului (se foloseste un PT2258).

Exemplu:

D7->E9

D7->E8

D7->E7

D7->E6

D7->E5

D7->E4

D7->E3

D7->E2

D7->E1

D7->E0

D6->E9

D6->E8

D6->E7

D6->E6

D6->E5

D6->E4

D6->E3

D6->E2

D6->E1

D6->E0

etc etc.

 

Cand apas pe buton pentru a mari volumul acesta creste uniform pana ajunge la D7->E0, D6->E0 etc unde se simte o scadere a volumului apoi isi revine continuand sa creasca uniform.

Va rog sa ma ajutati in gasirea erori.

 

Am atasat datasheetul PT-ului si programul scris in bascom.

Link spre comentariu

'---------------------Modificare volum---------------------'Sub Vol_up:Decr VolumaWaitms Vol_spIf Voluma < &HE0 ThenVoluma = &HE9End IfIf Voluma = &HE9 ThenDecr VolumbEnd IfIf Volumb < &HD0 ThenVolumb = &HD0End IfI2cstartI2cwbyte &H88I2cwbyte VolumaI2cwbyte VolumbI2cstopWaitms 10End Sub'---------------------Modificare volum---------------------'Sub Vol_dn:Incr VolumaWaitms Vol_spIf Voluma > &HE9 ThenVoluma = &HE0End IfIf Voluma = &HE0 ThenIncr VolumbEnd IfIf Volumb > &HD7 ThenVolumb = &HD7End IfI2cstartI2cwbyte &H88I2cwbyte VolumaI2cwbyte VolumbI2cstopWaitms 10End Sub'-------------------------------------- am scos ce era in plus sau redundant si acum trebuie sa mearga !

Link spre comentariu

Buna seara,Am un sistem 5.1 genius in care s-a ars controleru (SN8P2714SB) si negasind acest controler incerc sa-l inlocuiesc cu Atmega8.In mare am reusit sa scriu programul problema aparand la reglarea volumului (se foloseste un PT2258).Cand apas pe buton pentru a mari volumul acesta creste uniform pana ajunge la D7->E0, D6->E0 etc unde se simte o scadere a volumului apoi isi revine continuand sa creasca uniform.Va rog sa ma ajutati in gasirea erori.Am atasat datasheetul PT-ului si programul scris in bascom.

Daca tot finalizezi proiectul fa un nou thread si pune si schema si softul ca sa -si faca cei interesati modificarea la pocnitorile astea enshpe in unu pe viitor.
Link spre comentariu

Mai intai sa-l fac sa functioneze apoi voi face un thread pe tema asta.Nu am reusit nimic...tot asa "in trepte" merge.Am incercat cu oscilatorul intern de la 1MHz pana la 8MHz si tot nu a vrut.Am setat si pe oscilator extern si tot nu a mers pana cand am atins cu degetul in zona cristalului si tot montajul s-a oprit.L-am repornit si a functionat corect dar cand am luat alimentarea a revenit la vechiul obicei.Danzup...daca scot acea parte din cod cand ajunge la D0 -> E0 se muta la D0 -> E9 si tot asa.(creste si scade volumul)Atasez mai jos schema si ultima varianta de cod poate nu am facut ceva bine.

Link spre comentariu

Am un Atmega8 cu LCD. Cum fac in Bascom sa-mi apara un caracter facut de mine, caracterul l-am facut cu LCD designer iara comanda ar trebui sa fie asta:Deflcdchar 1 , 4 , 10 , 21 , 31 , 4 , 14 , 10 , 10nu reusesc sa-l fac sa apara pe ecran.Unde gresesc?

Lcd Chr(1)si o sa apara !
Link spre comentariu
  • 1 lună mai târziu...

Pai verifica daca placa corespunde ok din punct de vedere electronic cu schema !! sa nu fie busit vre-un pin sau ceva de la controler. 2 se poate ca tu pe placa aia sa ai un bootloader si pe controlerul virgin sa nu ai asa ceva(dar asta nu prea ar putea sa iti afecteze programu care este incarcat la alta adresa in memorie).

Link spre comentariu

Salutare baieti, Am si eu o nedumerire legata de un program scris in Bascom, pentru un MCU Atmega8. Este vorba de o comanda a 4 sub-meniuri cu ajutorul unui buton. Am un singur buton disponibil. Codul merge bine si arata asa:------------------------------------------------------------------------------------Buton = Pinc.2If Buton = 0 Then Waitms 40If Buton = 0 Then Incr NrBitwait Pinc.2 , SetEnd IfEnd If If Nr = 5 Then Nr = 1 End IfSelect Case Nr Case 1 : Call Submeniu1 Case 2 : Call Submeniu2 Case 3 : Call Submeniu3 Case 4 : Call Submeniu4End Select------------------------------------------------------------------------------Problema care o supun atentiei este adaugarea unei rutine care sa-mi citeasca apasarea butonului (acelasi!) un timp de 5 secunde (sa zicem...) si daca se intampla acest lucru sa trec la un "Submeniu5". Pare simplu (pentru cei care stiu) dar eu nu am reusit sa-l fac pana acuma. Daca stie cineva o solutie, multumesc anticipat!

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