Sari la conținut
ELFORUM - Forumul electronistilor

Invatat programare de la zero


Postări Recomandate

Probabil ca exprimarea corecta ar fi "nu termina un #define cu ;". Sau?

 

liviu, mars01

nu o luati ca flame, dar depinde de ce a avut in cap cel de a facut compilatorul.

exemplu mikroC utilizat de mars, pot sa scriu asta:

 

#define semicolon ;

 

int a=1 semicolon

 

 

si va promit ca merge compilarea.

scuze pt. ... oftopic.

Link spre comentariu

Pai cred ca daca nu ar fi temporizarea de 10 variabila timp ar scadea instantaneu de la 6000 la 0 in fuctie de viteza cu care se executa instructiunile.

Cred totusi ca ar fi trebuit sa fie delay 1sec pentru a trece cele 10 minute.

Ceva de genu

Timp=timp-1

Delay 1sec

Until timp=zero

De fapt timpul scade cu o unitate odata la 10 ms.

Dupa 60 de secunde ajunge la zero.

Asta inseamna ca delay trebuie sa fie 100ms pentru 10 minute timp in care ledul sta aprins.

100msX6000=600sec.

Eu asta inteleg.

 

Promit ca nu mai postez noaptea. 

 

De data aceasta este o greseala.

unsigned int timp = 6000;

ar trebui sa fie:

unsigned int timp = 60000;

Motivul este ca initial am vrut ca unitatea de trecere a timpului sa fie 100ms. Apoi m-am razgandit si am ales ca unitatea de trecere a timpului sa fie 10ms. Am modificat prin toate comentariile dar am scapat initializarea variabilei din declaratie.

 

Daca "unitate de trecere a timpului" era 100ms, 6000 * 100ms = 600 000 ms = 600sec = 10minute

Daca "unitatea de trecere a timpului" este 10ms. 60000 * 10ms = 600 000ms = 600sec = 10minute

 

Ideea este ca daca lasam "unitatea de trecere a timpului" in 100ms, era foarte posibil ca in varianta a -2-a postata (care este de fapt cea de la care am plecat), cand se apasa butonul in timpul temporizarii, sa ratez o apasare de buton, deoarece apasarea ar fi putut fi in efectuata fix in timpul acelui delay. 100ms este un timp destul de lung si daca apasarea era rapida, nu ar fi fost sesizata.

liviu, mars01

nu o luati ca flame, dar depinde de ce a avut in cap cel de a facut compilatorul.

exemplu mikroC utilizat de mars, pot sa scriu asta:

 

#define semicolon ;

 

int a=1 semicolon

 

 

si va promit ca merge compilarea.

scuze pt. ... oftopic.

 

De compilat merge, dar cand folosesti efectiv in program ceea ce ai definit prin #define, numai merge ... Functioneaza chestia.

 

Dar va las acum, ma intorc la montajul la care lucrez :) FPGA-ul ma omoara la lipit ...

Editat de mars01
Link spre comentariu

#define semicolon ;

He, he, recunosc, la varianta asta nu m-as fi gandit. :) Am testat acum si merge si in xc8 si programul cu "semicolon" pe post de ";" se compileaza.

Merci, am mai invatat ceva si astazi. :aplauze

 

Programul care se compileaza:

#include <xc.h>#define _XTAL_FREQ 20000000#define semicolon ;/* *  */void main(void) {  PORTB = 0 semicolon                 // initializare port B(toate iesirile in low)  TRISB = 0 semicolon                 // port B setat ca iesire  while(1) {    PORTBbits.RB0 =  ~PORTBbits.RB0 semicolon         // basculare RB0(isi schimba starea)    __delay_ms(1000)semicolon          // cu o pauza de 1 secunda  }}
Editat de Liviu M
Link spre comentariu

nu inteleg aceasta linie . 

 

Linia precedenta  ("timp = timp - 1;") realizeaza practic temporizarea (variabila timp va scadea cu o unitate pentru fiecare 100ms care trec) , atunci de ce mai este nevoie si aceasta intarziere (delay_ms(10))   ?

 

 

Pai cred ca daca nu ar fi temporizarea de 10 variabila timp ar scadea instantaneu de la 6000 la 0 in fuctie de viteza cu care se executa instructiunile.

 

Pai ...s-ar indeplini conditia din functia "while" (while (timp != 0)) , prin urmare aceasta nu s-ar mai executa si ar trece la urmatoarea linie : "RB0_bit == OFF"  . 

 

...sau nu ?

Editat de iuli09
Link spre comentariu

Salutare!

In primul rand vreau sa-l felicit pe @mars01 care scrie "romane" in acest topic doar ca sa intelegem si noi ceva,bravoo :aplauze  :aplauze  :aplauze ,jos palaria.

In al doilea rand as vrea si eu sa stiu cum se conecteaza un atmega sau un pic la PC,de exemplu aTmega8 ,iau un cablu USB ca are 4 fire doua cu tensiunea de 5v si cele doua care raman unde le conectez si cum fac sa trimit codul din PC in aTmega ce program imi trebuie ,ce cablu si cum fac acest lucru,am cautat pe net ,dar nu-mi arata,arata doar proiectul si eventual codul.

In programare ma sperie putin partea cu PORTB ,TRISB,si toate cele ,in rest partea cu while ,for,vectori,matrici,pointeri,functii le stiu de la scoala de la informatica ,e chiar simplu sa faci acel LED sa clipeasca,dar e mai complicat cu acele porturi sa le setezi ca in out ,asta din ce am citit mai sus sau poate e complicat ca am citit pentru prima data,poate ma obisnuiesc.

Inca odata te felicit ,bravo.

Link spre comentariu

Intr-adevar @mars01 merita toate felicitarile pentru cate scrie in acest topic dar si in altele.Eu il apreciez de mai mult timp pentru cate stie dar si pentru cat ne ajuta pe altii cu toate ca nu este obligat.Si eu doresc sa invat ceva programare asa ca urmaresc cu interes acest topic.

Editat de cipri_mury
Link spre comentariu

@PKP88 pentru programarea unui microcontroler ai nevoie de un montaj electronic numit PROGRAMATOR. Nu este suficient un cablu USB. Pentru PIC ar fi PICKIT2  si pentru atmel USBASP (sper sa nu gresesc aici ). Partea cu registrii nu ar trebui sa te sperie daca spui ca cunosti un limbaj de programare. Este destul de simplu... mai reciteste acest topic si eventual vino cu intrebari concrete la ce nu intelegi.

Link spre comentariu

Si ca sa il completez pe colegul @djvas, este posibil ca dupa ce a fost folosit un programator gen PicKit pentru a incarca un program special numit bootloader intr-un microcontroler PIC (sau AVR sau altul dar cu programatoarele lor) nu va mai fi nevoie de programatorul PicKit si intr-adevar se pot incarca programele direct in PIC cu ajutorul unui simplu convertor de la USB la serial.

 

De fapt, chiar acum imi compilam un program bootloader (l-am modificat ca sa am modulul CCP2 pe pinul RB3 - default este pe pinul RC1) ca sa il incarc intr-o placuta pe care am facut-o mai devreme :)

 

Si ca sa ma laud, un mic off-topic cu placuta in cauza (am facut niste experiente cu soldermask rosu)   :limb: :

Are 64KB flash, 4KB RAM, frecventa osc 64MHz, PIC18F26K20 si convertor USB la serial CH340.

Am facut porturile (de pini, hardware) A, B, C cu pini header galbeni ca sa le diferentiez.

E fascinant sa vezi cum se topeste solder paste-ul si se strange pe pad-uri ...

 

Posted Image

 

Posted Image

Editat de mars01
Link spre comentariu

Multumesc pentru raspuns.

Am cautat USBASP pe net si am gasit ceva la 20lei ,o fi bun?Si am gasit si schema de conectare de la acea mufa la atmega,acum inteleg.Si ca si program ce imi recomandati.

Da este bun.

Dar de ce nu ai pus intrebarea la aria "Atmega" aici se discuta de PIC-uri si mai ales de invatat programare.

 

NU trebuie sa poluam acest topic foarte util incepatorilor in programare cu alte intrebari care nu au legatura cu PIC-urile si programarea lor.

Link spre comentariu

bit 2 WDTEN = 0 - se dezactiveaza WATCH-DOG-ul. Asta este un periferic de care nu vreau sa discut aici, este o alta discutie. E suficient sa spun ca daca il activezi atunci procesorul  o sa stea intr-un reset continuu daca nu faci ceva in program.

Ce ai vrut sa spui cu " daca nu faci ceva in program" ?

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