Sari la conținut
ELFORUM - Forumul electronistilor

Probleme de incepatori


Postări Recomandate

Vizitator radur

Salut, nu stiu ce intelegi prin cristal intern, daca te referi la oscilatorul calibrat RC al uC-ului afla ca nu e tocmai 8MHz, ba chiar variaza in functie de temperatura si voltaj. El vine calibrat din fabrica la +/- 10% la valori fixe pentru temperatura si voltaj (valori gasite in datasheet).Nu e nimic complicat in adaugarea unui cristal extern la un uC.

Link spre comentariu
Vizitator opris_p006

Vreau sa controlez doua motoare de curent continuu cu ajutorul Atmega328. Am o problema legata de cititul encoderelor. Variabila globala time1 nu-si actualizeaza continutul in main (este tot timpul egala cu zero). Am atasat codul pe care il utilizez. Orice idee este binevenita!

 

#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> unsigned int time1,time2,t1,t2; int main() { TCCR0A = 0; TCCR0B = 0; TCCR2A = 0; TCCR2B = 0; DDRD|=(1<<DDD5)|(1<<DDD6)|(1<<DDD7);    TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00); PORTD|=(1<<PD7);           TCCR0B|=(1<<CS00);   // clk/1 (no prescalling) OCR0A=0;    OCR0B=0;    TCCR2A|=(1<<WGM21); TCCR2B|=(1<<CS20); //TCNT2 = 0; OCR2A = 100; OCR2B = 0; TIMSK2 |= (1<<OCIE2A); EIMSK |= (1<<INT0)|(1<<INT1); EICRA |= (1<<ISC11)|(1<<ISC01)|(1<<ISC10)|(1<<ISC00); sei();  while(1)         //PWM  {      if(time1!=0)      {        PORTD &=~(1<<PD7);       }      OCR0A=128;      OCR0B=128;            return (0);   } } //INT0 interrupt ISR(INT0_vect) {    time1 = t1;    t1 = 0; } //INT1 interrupt ISR(INT1_vect) {    time2 = t2;    t2 = 0; } //Timer2 interrupt ISR(TIMER2_COMPA_vect) {    t1++;    t2++;       }
Link spre comentariu

buna seara. Acum ca am progresat am vrut sa fac un instrument de masura pt bobine si cap un lc-metru realizat de yo6pir. Folosesc bascom si nu am reusit sa l programez pe cristal extern de 8 Mhz. Am incercat sa l setez 3 Mhz-8 Mhz si poi o alta varianta 8Mhz-12 Mhz, NU se intampla nimic dar daca il las pe osc intern functioneaza eronat si imprecis Asta este prima problema , a doua este ca a trebuit sa bag un alt cod eeprom si acum vreau sa folosesc acel uc pt alte proiecte pe oscilator intern(am reusit sa l deblochez si merge pe osc intern, dar nu mai raspunde cum trebuie la cod). Banuiesc ca imi trebuie eepromul din fabrica asa ca rog pe cineva daca stie cum sa rezolv cele 2 probleme , mai ales cu eepromul original

Link spre comentariu
Vizitator radur

Vreau sa controlez doua motoare de curent continuu cu ajutorul Atmega328. Am o problema legata de cititul encoderelor. Variabila globala time1 nu-si actualizeaza continutul in main (este tot timpul egala cu zero). Am atasat codul pe care il utilizez. Orice idee este binevenita!

volatile unsigned int time1,time2,t1,t2; 
Link spre comentariu
Vizitator biunghi

Salut...am incercat o varianta de pe net pe port serial com a unui programator...si merge...problema e k...am creat un fisier hex scris in cod de asamblare cu isis proteus lam compilat,mia mers ,lam scris pe microcontroler si merge foarte bine, apoi am creat un fisier hex scris in c cu avr studio4 lam compilat,a mers fara nicio eroare, lam scris pe microcontroler si asta nu mai merge...nu inteleg de ce...ambele fisiere aveau un KB...defapt niciun program scris in c cu avr studio4,chiar daca la compilare imi merge,atunci cand le scriu pe microcontroler nu merg....mai ciudat e k atunci cand incarc fisierele hex intrun simulator (ca de ex isis proteus) acolo imi merg....de mentionat k folosesc atmega8 si pentru a scrie fisierele hex pe mcu folosesc pony prog....multumesc anticipat

Link spre comentariu
Vizitator spy_oh_joy1389

Intreb si eu aici ca am dat peste o problema. Aici este proiectul meu si al colegei mele: http://matrix.elcom.pub.ro/~B37/DHarware.html

uC are instalat pe el un bootloader pentru a-l putea programa prin serial. Aseara am incarcat primul program pe el, facut cu Code Vision AVR in C, facand setarile doar din interfata grafica. Am setat primii 4 pini de pe portul A ca iesire, si i-am pus pe 1 logic pentru a aprinde ledurile. Totul mergea frumos, apasam pe pinul de reset, se dezactiva programul. Plec pana la toaleta, cand ma intorc, ledurile de pe portul A palpaiau. Asta am vazut ca era de la baterie. Am schimbat bateria si ledul de status de pe pinul 20 nu mai palpia si nici nu mai raspunde la butonul de reset, iar AVRBuster nu mai recunoaste bootloaderul. De asemenea, in terminal nu mai raspunde la caracter cu caracter+1. Ce trebuie facut? Trebuie rescris cu programatorul bootloaderul, ca altfel n-am nicio idee. Asta ar insemna sa il dau inapoi domnului profesor ca eu nu dispun de un prgramator.

Link spre comentariu
Vizitator spy_oh_joy1389

Am reusit sa resetez palcuta. Am incercat sa fac la un joc de leduri sa porneasca atunci cand apas butonul de pe pinul 19. Treaba e ca nici macar nu-l ating si sesizeaza ca a fost apasat. Nu e o coincidenta, ca se intampla numai cand apropii degetul de buton. Aveti vreo idee ce se intampla?

Aici am filmat.

Link spre comentariu
Vizitator radur

Cu alte cuvinte ar trebui sa setezi pinul respectiv ca INPUT_HIGH (adica sa fie legat prin pull-up intern la V+) si ca cand il "apesi" trebuie sa-l "apesi" cu V0 (ground), ca sa-si schimbe valoarea in LOW.

 

Daca vrei neaparat sa functioneze ca INPUT_LOW trebuie sa-l ti conectat la masa cand nu e HIGH, adica in timp ce butonul este OFF pinul sa fie legat la masa, cand e "apasat" il legi printr-o rezistenta la V+.

 

Debouncing poti face si din program ceva de genul

 

interrupt(vector){daca e pinul highasteapta 20msdaca tot e high inseamna ca e high    {       fa nebuneli cand e high   }}
Link spre comentariu

Daca vrei neaparat sa functioneze ca INPUT_LOW trebuie sa-l ti conectat la masa cand nu e HIGH, adica in timp ce butonul este OFF pinul sa fie legat la masa, cand e "apasat" il legi printr-o rezistenta la V+.

Cred ca vroiai sa zici sa fie legat printr-o rezistenta la masa iar cand butonul este apsat, sa faca legatura la VCC. Daca e legat la masa, nu mai are nici o sansa sa ridice tensiunea...
Link spre comentariu
Vizitator radur

erm .. nu, vroiam sa zic sa fie legat, prin intrerupator, la masa pe pozitia normal deschis a intrerupatorului, ceva gen attach.Bine, asta tine si de tipul de intrerupator :)

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