Sari la conținut
ELFORUM - Forumul electronistilor

Probleme de incepatori


Postări Recomandate

1) ai inteles gresit ! 8Kb e memnoria flash , microcontrolerul mergand pana la 20Mhz sau chiar 25Mhz asa cum le overclockez eu in mod curent iar 8Mhz e valabil doar pentru varianta de putere mica adica cu L , cele cu P conform datasheet merg pana la 16Mhz cu cristal quartz extern

Partial corect, dar nu ai citit complet ce a intrebat omul. Omul intreaba specific de ATMEGA8L-8PU, cel cu L in coada, si cu doi de 8 in denumire, din care al doilea e frecventa maxima de lucru garantata de producator, asa cum bine a inteles si naghi32. PU e doar capsula, DIP cu 28pini in cazul de fata.Pt naghi: daca nu ai nevoie de functionare la tensiune mica (2.7V), atunci poti renunta la varianta cu L si sa iei varianta "normala", de 5V si max 16MHz - atmega8-16pu.Iar daca vrei sa urci pana la 20MHz (sau cum fac unii, overclock la 25...), mergi pe seria urmatoare, gen atmega88-20pu.

Vezi ca are intern si un oscilator Rc calibrat care merge de la 1Mhz si pina la 8Mhz ( valoarea lui fiind programabila in rage-ul mentionat ) si nu are nevoie de cristal de quartz extern

Adevarat, dar depinde de aplicatie. Daca are nevoie de comunicatie seriala de ex, se recomanda totusi cuartz extern (oscilatorul intern are toleranta prea mare).
Link spre comentariu
1) ai inteles gresit ! 8Kb e memnoria flash , microcontrolerul mergand pana la 20Mhz sau chiar 25Mhz asa cum le overclockez eu in mod curent iar 8Mhz e valabil doar pentru varianta de putere mica adica cu L , cele cu P conform datasheet merg pana la 16Mhz cu cristal quartz extern

 

Partial corect, dar nu ai citit complet ce a intrebat omul. Omul intreaba specific de ATMEGA8L-8PU, cel cu L in coada, si cu doi de 8 in denumire, din care al doilea e frecventa maxima de lucru garantata de producator, asa cum bine a inteles si naghi32. PU e doar capsula, DIP in cazul de fata.

 

Pt naghi: daca nu ai nevoie de functionare la tensiune mica (2.7V), atunci poti renunta la varianta cu L si sa iei varianta "normala", de 5V si max 16MHz - atmega8-16pu.

Iar daca vrei sa urci pana la 20MHz (sau cum fac unii, overclock la 25...), mergi pe seria urmatoare, gen atmega88-20pu.

 

Vezi ca are intern si un oscilator Rc calibrat care merge de la 1Mhz si pina la 8Mhz ( valoarea lui fiind programabila in rage-ul mentionat ) si nu are nevoie de cristal de quartz extern

 

Adevarat, dar depinde de aplicatie. Daca are nevoie de comunicatie seriala de ex, se recomanda totusi cuartz extern (oscilatorul intern are toleranta prea mare).

Corect !

Link spre comentariu

Din pacate cei de la adelaida m-au dezamagit si nu au ceea ce ma intereseaza si nici nu stiu cand vor aduce.Ma interesau niste Atmega80-20 si attiny13, dar nu au nici un fel, stiti unde as putea comanda pe net asa ceva ? nici pe e-piese.ro nu au pe stoc asa ceva. multumesc ( sunt din cta ) si daca gasesc in acelasi loc un SN74HC244 ar fii perfect :) e pentru programator.

Link spre comentariu

Din pacate cei de la adelaida m-au dezamagit si nu au ceea ce ma intereseaza si nici nu stiu cand vor aduce.Ma interesau niste Atmega80-20 si attiny13, dar nu au nici un fel, stiti unde as putea comanda pe net asa ceva ? nici pe e-piese.ro nu au pe stoc asa ceva. multumesc ( sunt din cta ) si daca gasesc in acelasi loc un SN74HC244 ar fii perfect :) e pentru programator.

Incearca la conex la bucuresti. trimit prin posta. Preturile in schimb sunt destul de mari. eu am luat de la ei mega8 la vreo 7-8lei/buc.
Link spre comentariu

Salutare,

 

Referitor la proiectul cu submeniuri am facut si eu un cod de test. Pentru a intra in Meniu se apasa butonul o singura data, apoi tot printr-o singura apasare se acceseaza submeniurile. Daca se tine apasat butonul vreo 4 sec intra automat in meniul secret. Ca sa iasa din meniul secret se apasa butonul aprox 1 sec.

 

$regfile = "m8def.dat"$crystal = 4000000$hwstack = 32$swstack = 10$framesize = 40Config Lcd = 16 * 2Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0Dim A As ByteDim Nr As ByteDim Buton_apasat As WordConfig Portc.2 = InputSet Portc.2Buton Alias Pinc.2Declare Sub Submeniu1()Declare Sub Submeniu2()Declare Sub Submeniu3()Declare Sub Submeniu4()Declare Sub Submeniu5()' Selectare MeniuClsWaitms 500Cursor OffLocate 1 , 1Lcd "Selectare meniu "Locate 2 , 1Lcd " Apasa Butonul! "Meniu:DoDebounce Buton , 0 , Apasare_buton , SubIf A = 1 ThenIncr NrIf Nr > 4 Then Nr = 1A = 0Cursor OffLocate 1 , 1Lcd "MENIU           "Locate 2 , 1If Nr = 1 Then Lcd "  Submeniu1     "If Nr = 2 Then Lcd "  Submeniu2     "If Nr = 3 Then Lcd "  Submeniu3     "If Nr = 4 Then Lcd "  Submeniu4     "'If Nr = 5 Then Lcd "  Submeniu5     "Waitms 100End IfLoopBitwait Buton , SetSelect Case NrCase 1 : Call Submeniu1()Case 2 : Call Submeniu2()Case 3 : Call Submeniu3()Case 4 : Call Submeniu4()End Select' ********** Submeniu1Sub Submeniu1()End Sub' ********** Submeniu2Sub Submeniu2()End Sub' ********** Submeniu3Sub Submeniu3()End Sub' ********** Submeniu4Sub Submeniu4()End Sub' ********** Submeniu5Sub Submeniu5()DoLocate 1 , 1Lcd "Meniu secret    "Locate 2 , 1Lcd "  Submeniu5     "Wait 1If Buton = 0 ThenWait 1Goto MeniuEnd IfLoopEnd SubApasare_buton:Buton_apasat = 0DoIncr Buton_apasatWaitms 1If Buton_apasat > 3000 ThenCall Submeniu5()End IfA = 1Loop Until Buton = 1
Link spre comentariu

Iulian2010, am incercat softul propus de tine, cel cu meniu secret, este OK. As avea totusi ceva de adaugat, faptul ca in acel meniu secret nu pot executa nimic, deoarece refresh-ul acelei subrutine este de 1 sec. si orice pun acolo se misca foarte greu. Am pus sa citeasca o intrare ADC si un alt buton si nu prea merge OK din cauza refresh-ului. Am marit refresh-ul la 300ms si se misca mai repede dar tot nu e convenabil. Daca te poti uita putin peste program si sa mai modifici ceva acolo e foarte bine. Oricum am filtrat deja ideea ta de acolo si-mi prinde bine la urmatorul meu program. E vorba de folosirea procedeului de numarare a delay-ului de 1ms pentru a creea o intarziere la rutina debounce a butonului, in loc de folosirea Timer1 in cazul meu si intreruperea de program. Dar orice idee este bine-venita si numai asa invatam. OK, toate bune si mai vorbim, Ovidiu.

Link spre comentariu

Simnakovi,

Codul de mai sus a fost doar o idee, pe langa cele ale colegilor de forum Danzup si Ratza.

Poate codurile de mai jos iti sunt de folos tot ca idei numai. Voi incerca si eu cand am timp sa fac o optimizare la codul de care ai nevoie.

 

Sarbatori fericite tuturor!

 

' Simplu click, Dublu click si Click lung' In:  Pinb.0: Buton pus la ground' Out: PortC.0: Led rosu    'lumineaza cu click scurt' Out: PortC.1: Led galben   'lumineaza cu click lung' Out: PortC.2: Led verde  'lumineaza cu dublu click$regfile = "m8def.dat"$crystal = 4000000Config Portc = OutputLed_rosu Alias Portc.0Led_galben Alias Portc.1Led_verde Alias Portc.2Config Portb.0 = InputPortb.0 = 1Buton Alias Pinb.0Dim Buton_apasat As ByteConst Buton_apasat_lung = 100Const Buton_apasat_2ori = 20Dim Click As ByteConst Scurt = 1Const Lung = 2Const Dublu = 3Do  Debounce Buton , 0 , Apasare_buton , Sub  Select Case Click  Case Scurt:      Led_rosu = 1      Led_galben = 0      Led_verde = 0      Click = 0      Wait 1  Case Lung:      Led_rosu = 0      Led_galben = 1      Led_verde = 0      Click = 0      Wait 1  Case Dublu:      Led_rosu = 0      Led_galben = 0      Led_verde = 1      Click = 0      Wait 1  End Select  'Portc = 0LoopApasare_buton:  Buton_apasat = 0  Do    Incr Buton_apasat    Waitms 10  Loop Until Buton = 1 Or Buton_apasat = Buton_apasat_lung  If Buton_apasat = Buton_apasat_lung Then    Click = Lung  Else    Buton_apasat = 0    Do      Incr Buton_apasat      Waitms 10    Loop Until Buton = 0 Or Buton_apasat = Buton_apasat_2ori    If Buton_apasat = Buton_apasat_2ori Then      Click = Scurt    Else      Click = Dublu    End If  End IfReturnEnd

 

Config Timer1 = Counter , Prescale = 64                    'keyevents (10 Hz) On Timer1 Checkkeys Do LoopCheckkeys:Timer1 = Timer1_defaultIf Pind.6 = 0 Then  If Key_up_state = 0 Then    Key_up_state = 1  Else    Incr Key_up_count  End IfElse  If Key_up_state = 1 Then    'from 0 - 500ms    If Key_up_count > 0 And Key_up_count <= 5 Then       ' shot press       Key_up_count = 0    End If' after 600ms    If Key_up_count > 6 Then      ' long press       key_up_count = 0    End If  End IfEnd IfIf Pind.5 = 0 Then  If Key_down_state = 0 Then    Key_down_state = 1  Else    Incr Key_down_count    ' after 3 seconds of pressing    If Key_down_count > 30 Then      Key_down_state = 0      Key_down_count = 0    End If  End IfElse  If Key_down_state = 1 Then   ' from 0 - 500ms    If Key_down_count > 0 And Key_down_count <= 5 Then      Call Decrement      To_confirm = 1      Key_down_state = 0      Key_down_count = 0    ' from 600ms - 2.9 seconds    Else      Key_down_state = 0      Key_down_count = 0    End If  End IfEnd IfReturn
Link spre comentariu

Adevarat a Inviat!

 

Simnakovi,

Poti sa arunci o privire si pe codul lui Ben Zijlstra.

 

' Dynamic Single Button Menu - Ben Zijlstra / Theo Kleijn - april 2007$sim                                                        'it is ready for the simulator, but you have to work around the buttonpresses….'some housekeeping$regfile = "m32def.dat"$crystal = 16000000$hwstack = 128$swstack = 128$framesize = 128'things can be tested in the simulator, put a 1 for test and a 0 for the real worldConst Dubug = 1                                             '1 for debugging / simulator'here the declaration of the subroutines that are usedDeclare Sub MenuDeclare Sub BuzzerDeclare Sub ReadmenuDeclare Sub Pick_itemDeclare Sub Pick_optionDeclare Sub Option101Declare Sub Option808'and here the global variables that are usedDim M(9) As String * 30Dim Mx(9) As String * 30Dim Menu1 As String * 255Dim O(2)as String * 30Dim Teller As ByteDim Exitmenu As Byte , Exitflag As Byte , X As Byte'hardware depended, a LCD. 16 x 2 and 20 x 2 can be used.Config Lcd = 20 * 2Config Lcdmode = PortConfig Lcdbus = 4Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , _        Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0Initlcd'the single button connected to PIN A.1 and a buzzer connected to PORT A.2Buttonup Alias Pina.1Beepact Alias Porta.2Config Beepact = OutputClsHome' and here we go for the real stuff, a call to the menu-routineCall MenuEndSub MenuLocal Tl As LongCall BuzzerCall ReadmenuExitmenu = 0Do   For X = 1 To 9      Tl = 0' get the menu-items, split them on the # sign and put them in array MX()      Teller = Split(m(x) , Mx(1) , "#")'skip the empty menu-items      If Mx(1) = "                " Then'check if we are in the debug / simulator mode, waits are short, or in the real world, normal waits         #if Dubug            Tl = 99         #else            Tl = 299999         #endif      Else         Cls         Home'put the menu-items on the LCD and keep them moving….         Lcd Mx(1)      End If' wait for a key-press, if nothing is press carry on to the next menu-item      Do         Incr Tl         Debounce Buttonup , 0 , Pick_item , Sub         #if Dubug             Loop Until Tl = 100         #else             Loop Until Tl = 300000         #endif   Next X'keep doing this until the exit menu item has been selectedLoop Until Exitmenu = 1End SubSub Pick_item'this subroutine is called when a menu-item is selectedLocal Tl As Long   ' beep   Call Buzzer   If Right(mx(2) , 2) = "10" Then ' check if the exit menu is pressed      Exitmenu = 1      Exit Sub   End If   Restore Mnu  'we have stored the selected menu-item in an array and the second part of this array contains the 'data-line'  'we have to read to get the options of this menu-item   For X = 1 To Val(mx(2))      Read Menu1   Next X   Teller = Split(menu1 , M(1) , "_")   Exitflag = 0   Do      For X = 1 To 9         Tl = 0         Teller = Split(m(x) , O(1) , "#") 'skip the empty menu-options          If O(1) = "                " Then            #if Dubug                 Tl = 99            #else                 Tl = 299999            #endif         Else            Home            Lowerline 'put the option on the screen          Lcd O(1)         End If         Do 'and wait for a keypress when the right option appears            Incr Tl            Debounce Buttonup , 0 , Pick_option , Sub            Print Tl            #if Dubug                Loop Until Tl = 100            #else                Loop Until Tl = 300000            #endif      Next X   Loop Until Exitflag = 1End SubSub Pick_option   Call Buzzer'if the last option is selected, the exit option clear the screen and set the exitflag. Returning to the menu-items.   If Right(m(x) , 1) = "9" Then      Cls      Home      Exitflag = 1      Call Readmenu   End If   Select Case Right(m(x) , 3)       'here all numbers of all selected options appear. Action can be taken here. Only two options are used now.       Case "101" : Call Option101       'case etcetera       Case "808" : Call Option808   End SelectEnd Sub'routine to read the datalines, and split them on the "_" signSub Readmenu   Restore Mnu   Read Menu1   Teller = Split(menu1 , M(1) , "_")End Sub'beep routineSub BuzzerReset BeepactWaitms 100Set BeepactEnd Sub'one of the selections calls this routine as an exampleSub Option101'take action here and return to menuEnd Sub'and another one the selections calls this routine as an exampleSub Option808'take action here and return to menuEnd SubMnu:Data "Menuitem 1      #2_Menuitem 2        #3_                  #4_Menuitem 4        #5_Menuitem 5        #6_Menuitem 6        #7_Menuitem 7        #8_Menuitem 8        #9_Exit menu         #10"Data "Option 11       #101_                #102_Option 13       #103_Option 14       #104_                #105_Option 16       #106_Option 17       #107_Option 18       #108_Exit Options    #109"Data "Option 21       #201_Option 22       #202_Option 23       #203_Option 24       #204_Option 25       #205_Option 26       #206_Option 27       #207_Option 28       #208_Exit Options    #209"Data "Option 31       #301_Option 32       #302_Option 33       #303_Option 34       #304_Option 35       #305_Option 36       #306_Option 37       #307_Option 38       #308_Exit Options    #309"Data "Option 41       #401_Option 42       #402_Option 43       #403_Option 44       #404_Option 45       #405_Option 46       #406_Option 37       #407_Option 48       #408_Exit Options    #409"Data "Option 51       #501_Option 52       #502_Option 53       #503_Option 54       #504_Option 55       #505_Option 56       #506_Option 57       #507_Option 58       #508_Exit Options    #509"Data "Option 61       #601_Option 62       #602_Option 63       #603_Option 64       #604_Option 65       #605_Option 66       #606_Option 67       #607_Option 68       #608_Exit Options    #609"Data "Option 71       #701_Option 72       #702_Option 73       #703_Option 74       #704_Option 75       #705_Option 76       #706_Option 77       #707_Option 78       #708_Exit Options    #709"Data "Option 81       #801_Option 82       #802_Option 83       #803_Option 84       #804_Option 85       #805_Option 86       #806_Option 87       #807_Option 88       #808_Exit Options    #809"
Link spre comentariu

Da, interesant programul dar ocupa cam mult loc, si eu nu am lucrat inca cu asa exemplare mari cum e Atmega32. Te cred, in 32Kb de memorie de program iti permiti sa risipesti 12% (aprox 3,8Kb!) pentru rutina de comanda a butonului. Dar intr-un Atmega8 cum folosesc eu de obicei, cu doar 8Kb de memorie nu prea incape si rutina de comanda a butonului( butoanelor) si programul in sine. Oricum mersi de info si este utila pentru invatare. Toate bune si mai vorbim, 73!

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