Jump to content


Photo

BASCOM


  • Please log in to reply
538 replies to this topic

#16 OFFLINE   yo9hnf

yo9hnf

    ElForum staff

  • Moderatori
  • 3,072 posts
  • Locatie:BUCURESTI

Posted 11 December 2010 - 03:15 PM

yo9hnf, daca inca n-ai renuntat la idee hai sa facem impreuna cu alti elforumisti interasati un proiect pentru un ceas cu uC AVR si afisaj cu 7.1 segmente cu LED-uri . Vrei?

Va salut ! Nu am renunta la idee...oricum subiectul era BASCOMul in sine, ceasul fiind doar un exemplu.

Cu_reclama

Cu_reclama
  • Membri

#17 ONLINE   vasile eugen

vasile eugen

    Membru avansat

  • Membri
  • PipPipPipPip
  • 2,140 posts
  • Locatie:Loc.Sarmasag Jud.Salaj

Posted 11 December 2010 - 09:43 PM

este un subiect bun si acesta , caci intradevar despre BASCOM in particular nu a fost nici un topic ,nici pe alte forumuri romanesti. Chiar daca sunt exemple in HELP ,sunt termeni care nu ii poate intelege un incepator.

#18 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,729 posts
  • Locatie:Bucuresti

Posted 13 December 2010 - 04:12 PM

Imi exprim disponibilitatea de a furniza celor interesati un curs de programare folosind platforma BASCOM-AVR.
Din pacate fisierul are 33Mb, asa ca ... pm cu o adresa de e-mail.
Desi este in engleza, sper ca va gasi cititori.

Cu privire la propunerile din topic, particip cu draga placere si cu bruma de experienta pe care o am.

#19 OFFLINE   yo9hnf

yo9hnf

    ElForum staff

  • Moderatori
  • 3,072 posts
  • Locatie:BUCURESTI

Posted 13 December 2010 - 04:58 PM

Sa traiesti !

yo9hnf@gmail.com

#20 OFFLINE   ywar2

ywar2

    Membru

  • Membri
  • PipPip
  • 585 posts

Posted 13 December 2010 - 10:37 PM

Salut. YO9HNF, ai facut ceasul sa mearga? Ai pus o intrebare si eu m-am invrednicit sa-ti raspund. Eram curios: merge?
Si pina se lamureste ce este cu subiectul asta Bascom si o sa apara si exemplele, pun eu o intrebare: ce face comanda GOSUB, caci mie mi se pare a fi un CALL cosmetizat.
Comanda CALL am tot folosit-o in proiectele mele, dar uitindu-ma in exemplul cu ceasul de mai sus, mi-am reamintit de ea. Cum de la HC85 au trecut o gramada de ani, putin remember nu strica. Pe curind!!!

#21 OFFLINE   nickrvl

nickrvl

    Membru avansat

  • Membri
  • PipPipPipPip
  • 2,338 posts
  • Locatie:Rm Valcea

Posted 14 December 2010 - 12:33 PM

Imi exprim disponibilitatea de a furniza celor interesati un curs de programare folosind platforma BASCOM-AVR.

Cu multumiri la stoicavl@yahoo.com daca se poate.

#22 ONLINE   vasile eugen

vasile eugen

    Membru avansat

  • Membri
  • PipPipPipPip
  • 2,140 posts
  • Locatie:Loc.Sarmasag Jud.Salaj

Posted 14 December 2010 - 02:21 PM

Imi exprim disponibilitatea de a furniza celor interesati un curs de programare folosind platforma BASCOM-AVR.
Din pacate fisierul are 33Mb, asa ca ... pm cu o adresa de e-mail.
Desi este in engleza, sper ca va gasi cititori.

Cu privire la propunerile din topic, particip cu draga placere si cu bruma de experienta pe care o am.

daca esti doresti m-ar interesa si pe mine acel curs

ID-iul meu: vonutan@yahoo.com

#23 OFFLINE   RoGeorge

RoGeorge

    Electronist

  • Membri
  • PipPipPipPipPip
  • 2,685 posts
  • Locatie:Bucuresti - Cluj

Posted 14 December 2010 - 03:17 PM

Nu e o idee buna sa va dati adresa de e-mail in clar pe o pagina publica. Exista roboti care se ocupa cu strangerea automata de asdrese de e-mail si dupa aia va treziti ca nu se mai termina reclamele si spam-urile din casuta voastra postala... :rade:

Gosub si Call fac aproape acelasi lucru, cheama o subrutina.
La call poti sa trimiti si paramentri pe cand la gosub nu.

Uite cum se foloseste help-ul din BASCOM. Scrii in programul tau
Gosub
pe urma dai click in interiorul cuvantului Gosub pe care tocmai l-ai scris si apesi tasta F1 (este a doua tasta de pe tastatura, pe randul de butoane cel mai de sus). Se va deschide automat o pagina unde iti spune ce face instructiunea Gosub, cum se foloseste si la sfarsit exemple de cod cu Gosub. Tot acolo ai si trimiteri catre alte instructiuni care au legatura cu gosub, cum ar fi Call.

F1 inseamna HELP in aproape orice program, inclusiv in BASCOM.
Folositi F1 cu toata incredearea! :limb:

#24 OFFLINE   yo9hnf

yo9hnf

    ElForum staff

  • Moderatori
  • 3,072 posts
  • Locatie:BUCURESTI

Posted 14 December 2010 - 10:28 PM

Salut. YO9HNF, ai facut ceasul sa mearga? Ai pus o intrebare si eu m-am invrednicit sa-ti raspund. Eram curios: merge?

Salut ywar2 !
Din pacate nu merge nici cum mi-ai indicat tu. Am incercat sa pun 254 si aici :

For Seconds = 1 To 5
Diagdelay = Diagdelay - 20
Portd = 1

si tot nu merge.


LATER EDIT : Am gasit si eu o carticica foarte bine gandita, cu paralela intre algoritm si bascom + exemple scurte.
http://www.scribd.co...9ViTztHJ7VgTKvo


SI MAI "LATER" : Am uplodat cartea pe megaupload si am scos din ea lucrurile inutile :

http://www.megaupload.com/?d=A3E2UD8H

#25 OFFLINE   ywar2

ywar2

    Membru

  • Membri
  • PipPip
  • 585 posts

Posted 15 December 2010 - 12:09 AM

Salut tuturor. RoGeorge, merci ptr raspuns. Am avut dreptate, GOSUB este un CALL cosmetizat, aceeasi Marie dar cu alta palarie. Ma intreb cit spatiu ocupa intr-un procesor. Uneori cind ajungi cu spatiul la limita, te uiti sa mai ajustezi codul, pe ici, pe colo. Daca un GOSUB ocupa mai mult sau mai putin decit un CALL neconditionat, atunci merita sa stii. Despre F1 stiu de mult, din exemplele din Help ma inspir cel mai mult....invat din mers.
YO9HNF, regret ca nu merge codul, in principiu ar fi trebuit sa mearga. Ar fi interesant sa pui codul tau modificat aici, se pare ca sint multi care se pricep la asta si multi care vor sa invete din experienta ta. Pina la proxima, 73!!!

#26 OFFLINE   yo9hnf

yo9hnf

    ElForum staff

  • Moderatori
  • 3,072 posts
  • Locatie:BUCURESTI

Posted 15 December 2010 - 10:05 AM

YO9HNF, regret ca nu merge codul, in principiu ar fi trebuit sa mearga. Ar fi interesant sa pui codul tau modificat aici, se pare ca sint multi care se pricep la asta si multi care vor sa invete din experienta ta. Pina la proxima, 73!!!


Nicio problema ! Ii dam noi de cap...

'--------------------------------------------------------------
$regfile = "m32def.dat"
$crystal = 16000000
'6 mhz crstal
Dim Once_a_sec As Bit
Dim Clock_word As Word
Dim Hours As Byte , Minutes As Byte , Seconds As Byte
Dim Red As Byte , Green As Byte
Dim Count As Byte , X As Byte , Segment As Byte
Dim Number As Byte , Digit_select As Byte
Dim Del As Byte , Diagdelay As Byte
Dim Large As Word
Del = 1
' delay variable in milliseconds
' all ports 0
Porta = 1
'red
Portb = 255

'yellow all high for sw inputs
Portd = 255
'green
Portc = 0
'blue not used
Config Debounce = 30
' key debounce time in milli seconds
Config Timer0 = Timer , Gate = Internal , Mode = 2
'Timer0 use timer 0
'Gate = Internal no external interrupt
'Mode = 2 8 bit auto reload
Gosub Diag
' diagnostic routine
' set t0 internal interrupt
On Timer0 Timer_0_int
Load Timer0 , 250

'Priority
Set Timer0                                                  'EROARE RADU
Enable Interrupts
Enable Timer0
Start Timer0
Hours = 0
Minutes = 0

Seconds = 0
Clock_word = 0
Do
' yellow port-1 key inputs for setting
Debounce Portb.0 , 0 , Hup , Sub
Debounce Portb.1 , 0 , Hdown , Sub
Debounce Portb.2 , 0 , Mup , Sub
Debounce Portb.3 , 0 , Mdown , Sub
Debounce Portb.4 , 0 , Zero , Sub
If Once_a_sec = 1 Then
' once_a_sec=calculation every second
Once_a_sec = 0
'update hh mm ss
'inc Seconds
If Seconds = 60 Then
Seconds = 0
'inc Minutes
If Minutes = 60 Then
Minutes = 0
'inc Hours
If Hours = 24 Then
Hours = 0
End If
End If
End If
End If
' display time constantly
' hours
Number = Hours / 10


Portd = 254
Gosub Disp
Waitms Del
Porta = 0
'-------
Number = Hours Mod 10
Portd = 253
Gosub Disp
Waitms Del
Porta = 0
'-------
'minutes
Number = Minutes / 10
Portd = 251
Gosub Disp
Waitms Del
Porta = 0
'-------
Number = Minutes Mod 10


Portd = 247
Gosub Disp
Waitms Del
Porta = 0
'-------
'SECONDS
Number = Seconds / 10
Portd = 239
Gosub Disp
Waitms Del
Porta = 0
'-------
Number = Seconds Mod 10
Portd = 223
Gosub Disp
Waitms Del
Porta = 0
'-------
Loop
' - - - - - - - - - - - - - - - - - -
' set keys below
Hup:
Incr Hours
If Hours >= 24 Then
Hours = 0
End If
Return
Hdown:
Decr Hours
If Hours = 255 Then
Hours = 23
End If
Return
Mup:
Incr Minutes
If Minutes >= 60 Then

Minutes = 0
End If
Return
Mdown:
Decr Minutes
If Minutes = 255 Then
Minutes = 59
End If
Return
Zero:
Hours = 0 : Minutes = 0 : Seconds = 0
Return
' - - - - - - - - -- - - - - - - -- - - - - -
Diag:
'diagnostics
'if zero button pressed then goto zero label and return
Diagdelay = 121
For Seconds = 1 To 5
Diagdelay = Diagdelay - 20
Portd = 1                                                   'INAINTE ERA 1
For Green = 0 To 5
Porta = 1
For Red = 0 To 7
Debounce Portb.4 , 0 , Zero
Waitms Diagdelay
Rotate Porta , Left
Next Red
Rotate Portd , Left
Next Green
Next Seconds
' next diag show 000000 to 999999 on all digits
' - - - - - - - -- - - - - -- - - - - - - -- - - -
For Number = 0 To 9
Portd = 1                                                   'INAINTE ERA 1
For Large = 1 To 50
' approx 1 second time loop with 200 in large
For Green = 0 To 5
Debounce Portb.4 , 0 , Zero
Gosub Disp
Waitms Del
Rotate Portd , Left
Next Green
Next Large
Next Number
Return
'Displaying routine

Disp:
Restore Tabela
' scan 7-seg table to get byte for the digit to display
For X = 0 To 9
Read Segment
If X = Number Then
'if X = value to display
Porta = Segment
'then set this value to Port0-red
Exit For
'and exit FOR loop
End If
Next
Return
' int subroutine -----------------
Timer_0_int:
Incr Clock_word
If Clock_word > 2000 Then
Clock_word = 0
Once_a_sec = 1
End If
Return
'---- data for 7-seg LED display ------
Tabela:
'Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111
Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
' end of program
' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


#27 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,729 posts
  • Locatie:Bucuresti

Posted 15 December 2010 - 12:29 PM

Salut!
Dupa o "profunda" analiza a schemei si programului de ceas, va propun urmatorul program, cu mentiunea ca nu se obtin rezultate satisfacatoare la simulare din cauza depasirii unora dintre parametrii simulatorului (P****us).
Programul este pentru ATMEGA 8, iar pentru ATMEGA32 se modifica $regfile, $hwstack si $swstack.

$regfile = "m8def.dat"
$crystal = 8000000
'6 mhz crstal
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 8
Dim Once_a_sec As Bit
Dim Clock_word As Word
Dim Hours As Byte , Minutes As Byte , Seconds As Byte
Dim Red As Byte , Green As Byte
Dim Count As Byte , X As Byte , Segment As Byte
Dim Number As Byte , Digit_select As Byte
Dim Del As Byte , Diagdelay As Byte
Dim Large As Word
Del = 1
' delay variable in milliseconds
' all ports 0
Portc = 0 'P0
'red
Portd = 255 'portd
'yellow all high for sw inputs
Portb = 0 'portb
'green
'P3 = 0
'blue not used
Config Debounce = 30
' key debounce time in milli seconds
Config Timer0 = Timer , Prescale = 8
'Timer0 use timer 0
'Gate = Internal no external interrupt
'Mode = 2 8 bit auto reload
'Gosub Diag
' diagnostic routine
' set t0 internal interrupt
On Timer0 Timer_0_int
Timer0 = 250
'Priority Set Timer0
Enable Interrupts
Enable Timer0
Start Timer0
Hours = 0
Minutes = 0
Seconds = 0
Clock_word = 0
Do
' yellow port-1 key inputs for setting
Debounce Pind.0 , 0 , Hup , Sub
Debounce Pind.1 , 0 , Hdown , Sub
Debounce Pind.2 , 0 , Mup , Sub
Debounce Pind.3 , 0 , Mdown , Sub
Debounce Pind.4 , 0 , Zero , Sub
If Once_a_sec = 1 Then
' once_a_sec=calculation every second
Once_a_sec = 0
'update hh mm ss
Incr Seconds
If Seconds = 60 Then
Seconds = 0
Incr Minutes
If Minutes = 60 Then
Minutes = 0
Incr Hours
If Hours = 24 Then
Hours = 0
End If
End If
End If
End If
' display time constantly
' hours
Number = Hours / 10
Portb = 1
Gosub Disp
Waitms Del
Portc = 0
'-------
Number = Hours Mod 10
Portb = 2
Gosub Disp
Waitms Del
Portc = 0
'-------
'minutes
Number = Minutes / 10
Portb = 4
Gosub Disp
Waitms Del
Portc = 0
'-------
Number = Minutes Mod 10
Portb = 8
Gosub Disp
Waitms Del
Portc = 0
'-------
'SECONDS
Number = Seconds / 10
Portb = 16
Gosub Disp
Waitms Del
Portc = 0
'-------
Number = Seconds Mod 10
Portb = 32
Gosub Disp
Waitms Del
Portc = 0
'-------
Loop
' - - - - - - - - - - - - - - - - - -
' set keys below
Hup:
Incr Hours
If Hours >= 24 Then
Hours = 0
End If
Return

Hdown:
Decr Hours
If Hours = 255 Then
Hours = 23
End If
Return

Mup:
Incr Minutes
If Minutes >= 60 Then
Minutes = 0
End If
Return

Mdown:
Decr Minutes
If Minutes = 255 Then
Minutes = 59
End If
Return

Zero:
Hours = 0 : Minutes = 0 : Seconds = 0
Return
' - - - - - - - - -- - - - - - - -- - - - - -
Diag:
'diagnostics
'if zero button pressed then goto zero label and return
Diagdelay = 121
For Seconds = 1 To 5
Diagdelay = Diagdelay - 20
Portb = 1
For Green = 0 To 5
Portc = 1
For Red = 0 To 7
Debounce Pind.4 , 0 , Zero , Sub
Waitms Diagdelay
Rotate Portc , Left
Next Red
Rotate Portb , Left
Next Green
Next Seconds
' next diag show 000000 to 999999 on all digits
' - - - - - - - -- - - - - -- - - - - - - -- - - -
For Number = 0 To 9
Portb = 1
For Large = 1 To 50
' approx 1 second time loop with 200 in large
For Green = 0 To 5
Debounce Pind.4 , 0 , Zero , Sub
Gosub Disp
Waitms Del
Rotate Portb , Left
Next Green
Next Large
Next Number
Return
'Displaying routine
Disp:
Restore Tabela
' scan 7-seg table to get byte for the digit to display
For X = 0 To 9
Read Segment
If X = Number Then
'if X = value to display
Portc = Segment
'then set this value to Port0-red
Exit For
'and exit FOR loop
End If
Next
Return
' int subroutine -----------------
Timer_0_int:
Incr Clock_word
If Clock_word > 2000 Then
Clock_word = 0
Once_a_sec = 1
End If
Return
'---- data for 7-seg LED display ------
Tabela:
Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7C , &H07 , &H7F , &H67
' end of program

Afisarea se face pe afisoare cu catod comun.

#28 OFFLINE   yo9hnf

yo9hnf

    ElForum staff

  • Moderatori
  • 3,072 posts
  • Locatie:BUCURESTI

Posted 15 December 2010 - 12:41 PM

@nico_2010 :
Ok. Multumesc pentru postarea programului !
Eu nu folosesc simulator pentru programe...am placa de evaluare si in cateva secunde dupa ce am dat compilare, am programul varat in uC.
Nu ca as avea eu o fixatie...dar pentru Anod Comun cum se facea afisarea?

#29 OFFLINE   nico_2010

nico_2010

    Membru avansat

  • Moderatori
  • 1,729 posts
  • Locatie:Bucuresti

Posted 15 December 2010 - 12:56 PM

Salut1
Pentru codurile segmentelor, te rog sa folosesti modelul de tabel din celalalt topic, tinand cont de nivelul logic care activeaza segmentele afisorului, iar pentru partea de multiplexare, inlocuieste in codul pe care l-am postat (si care este adaptarea programului pentru 8051) cu urmatoarele:
secunde: PORTB = 62 (111110)
zeci de secunde: PORTB = 61 (111101)
minute: PORTB = 59 (111011)
zeci de minute: PORTB = 55 (110111)
ore: PORTB = 47 (101111)
zeci de ore: PORTB = 31 (011111)
Cred ca trebuie sa ajustezi si prescalerul pentru Timer 0, deoarece este foarte posibil sa nu bata secunda.
Recunoasc ca in momentul asta mi-e lene sa adaptez placa cu afisoare la "placa de dezvoltare" pentru ca lucrez la un analizor de spectru 2,4 GHz care e mai captivant.

Cu_reclama

Cu_reclama
  • Membri

#30 OFFLINE   yo9hnf

yo9hnf

    ElForum staff

  • Moderatori
  • 3,072 posts
  • Locatie:BUCURESTI

Posted 15 December 2010 - 08:28 PM

Termometru cu indicatie MIN / MAX cu LM35, cod in Bascom + HEX, Atmega16

Voltmetru 25Vmax cu LED




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users