naghi32 Postat Martie 25, 2010 Partajează Postat Martie 25, 2010 Multumesc, se pare ca am inteles gresit, o sa bag mai adanc nasul in documentatie ! Link spre comentariu
stefan_k Postat Martie 25, 2010 Partajează Postat Martie 25, 2010 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 externPartial 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 externAdevarat, 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
danzup Postat Martie 25, 2010 Partajează Postat Martie 25, 2010 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
naghi32 Postat Martie 25, 2010 Partajează Postat Martie 25, 2010 Avand in vedere ca sunt incepator nu ma intereseaza frecvente foarte mari, desi presupun ca este nevoie daca imi trece prin cap sa incerc sa fac ceva in genul ceasurilor acelea cu motor ( propeller clock ) Link spre comentariu
lorik199 Postat Martie 29, 2010 Partajează Postat Martie 29, 2010 deci sa va mai deranjez inca odata, am gasit un proiect foarte simplu si care ar promite rezultate bune http://www.mikrocontroller.net/topic/152966 cer ajutorul cuiva mai avansat daca poate modifica programul pt lcd de 1x16 caractere, el acum fiind pt 2x8 Link spre comentariu
danzup Postat Martie 30, 2010 Partajează Postat Martie 30, 2010 deci sa va mai deranjez inca odata, am gasit un proiect foarte simplu si care ar promite rezultate bunehttp://www.mikrocontroller.net/topic/152966cer ajutorul cuiva mai avansat daca poate modifica programul pt lcd de 1x16 caractere, el acum fiind pt 2x8Uite aici : Link spre comentariu
lorik199 Postat Martie 30, 2010 Partajează Postat Martie 30, 2010 multumesc mult, o sa fac zilele astea montajul si va tin la curent cu detaliile Link spre comentariu
naghi32 Postat Martie 30, 2010 Partajează Postat Martie 30, 2010 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
ole Postat Martie 30, 2010 Autor Partajează Postat Martie 30, 2010 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
iulian2010 Postat Martie 31, 2010 Partajează Postat Martie 31, 2010 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
yo6pir Postat Aprilie 1, 2010 Partajează Postat Aprilie 1, 2010 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
iulian2010 Postat Aprilie 2, 2010 Partajează Postat Aprilie 2, 2010 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
naghi32 Postat Aprilie 4, 2010 Partajează Postat Aprilie 4, 2010 Tocmai ce mi-a ajuns un aTmega8535 si o sa incep sa ma joc cu el.Hristos a inviat ! Link spre comentariu
iulian2010 Postat Aprilie 8, 2010 Partajează Postat Aprilie 8, 2010 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
yo6pir Postat Aprilie 9, 2010 Partajează Postat Aprilie 9, 2010 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum