tilix_boss2008 Postat Iunie 9, 2010 Partajează Postat Iunie 9, 2010 Am si eu o problema. Sunt cam la baza uC. Ce vreau eu este sa fac un computer pentru bicicleta.Am zis sa o iau usor. Am inceput cu bascom-avr si isis.. Am inceput cu un led si un buton. Pe urma am avansat la lcd.Am reusit sa afisez pe el, dar cand vreau sa bag semnal cu ajutorul unui buton pe un pin nu mi-l citeste. uC este atmega8. Atasez codul in bascom si fisierul din isis.Poate reusiti sa imi spuneti unde gresesc ca imi mananca zilele de dimineata Link spre comentariu
tilix_boss2008 Postat Iunie 9, 2010 Autor Partajează Postat Iunie 9, 2010 Un link pentru arhiva http://fisierulmeu.ro/419XIXT3JP5D/CB-rar.html . Sper sa mearga. Link spre comentariu
mitescu Postat Iunie 10, 2010 Partajează Postat Iunie 10, 2010 Pai ... tu spuneai : .....dar cand vreau sa bag semnal cu ajutorul unui buton pe un pin nu mi-l citesteprin urmare daca vrei sa "bagi " semnal pe un PIN, de ce in cod testezi PORT si nu PIN"If PIND.2=....."(citeste datasheet) Link spre comentariu
tilix_boss2008 Postat Iunie 10, 2010 Autor Partajează Postat Iunie 10, 2010 mitescu mersik..dar nu vrea sa imi mai simuleze bine isisul :cry: . am zis sa o iau de la cap cu butonul si ledul si nici asta nu mai vrea cu toate ca am bagat bine codul, pentru ca alaltaieri mia mers Link spre comentariu
Vizitator Postat Iunie 10, 2010 Partajează Postat Iunie 10, 2010 M-am uitat prin codul tau si am gasit asa: 1. identeaza codul ca sa pricepi usor ce vrei sa faci, e foarte important desi functioneaza si neidentat, cam asa de ex: $regfile = "m8def.dat"$crystal = 1000000$baud = 19200 ' default use 40 for the frame spaceDim A As ByteConfig Portd.2 = Input 'CONFIG PORTD.2 AS INPUTConfig Lcd = 16 * 2 'configure lcd screenConfig Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , _ Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6ClsLcd "BICLA"Wait 1ClsIf Portb.2 = 1 Then Do Lcd "buton activat" Wait 1 Cls LoopEnd IfIf Portb.2 = 0 Then Do Lcd "butonul neapasat" Wait 1 Cls LoopEnd IfEnd 2. ai bucle infinite DO ... LOOP. Lipseste conditia de iesire din bucla si nici alte metode de iesire nu ai (gen intreruperi sau alceva) 3. ca sa citesti contacte iti trebuie neaparat debouncing 4. Nu stiu ce schema folosesti dar la orice citire de contacte trebuie sa tragi pinul cu contactul de citit la V+ cu o rezistenta externa sau cu cea interna a portului (activezi pull-up rezistor pe pinul de citit) 5. Citirea o faci cu instructiunea PIN, nu PORT Spor la treaba! Link spre comentariu
danzup Postat Iunie 10, 2010 Partajează Postat Iunie 10, 2010 $regfile = "m8def.dat"$crystal = 1000000$baud = 19200 ' default use 40 for the frame spaceDim A As ByteConfig Portd.2 = Input 'CONFIG PORTD.2 AS INPUTConfig Lcd = 16 * 2 'configure lcd screenConfig Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , _ Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6ClsLcd "BICLA"Wait 1ClsDoIf Portb.2 = 1 Then Lcd "buton activat" Wait 1 ClsEnd IfIf Portb.2 = 0 Then Lcd "butonul neapasat" Wait 1 ClsEnd IfLoopEnd Link spre comentariu
tilix_boss2008 Postat Iunie 10, 2010 Autor Partajează Postat Iunie 10, 2010 Danzup l-am scris in bascom exact cum ai spus tu...dar isisul meu tot nu vrea sa simuleze bine. imi zice decat buton neapasat chiar si cand apas.Am scos subrutina If Pinb.2 = 0 ThenLcd "butonul neapasat"Wait 1ClsEnd Ifsi acum dupa mesajul"bicla" nu mai imi afiseaza nimica chiar si daca apas. Link spre comentariu
danzup Postat Iunie 10, 2010 Partajează Postat Iunie 10, 2010 Danzup l-am scris in bascom exact cum ai spus tu...dar isisul meu tot nu vrea sa simuleze bine. imi zice decat buton neapasat chiar si cand apas.Am scos subrutina If Pinb.2 = 0 ThenLcd "butonul neapasat"Wait 1ClsEnd Ifsi acum dupa mesajul"bicla" nu mai imi afiseaza nimica chiar si daca apas.si normal : ai activat rezistenta pullup pentru pinb.2 ?isis e un pic cretin !daca il scrii in microcontroler o sa mearga cum am scris eu ! Link spre comentariu
tilix_boss2008 Postat Iunie 10, 2010 Autor Partajează Postat Iunie 10, 2010 Chef esti boss atunci daca zici ca merge. Rezistentele pull-up interne nu leam activat . Oricum in locul acelui buton o sa vina un senzor TLE4935 montat pe roata cu 2 magneti. Atunci o sa masor "timpul" cu un counter si o sa afisez viteza .Oricum thx danzup. Esti tare...tineo tot asa . Link spre comentariu
tilix_boss2008 Postat Iunie 11, 2010 Autor Partajează Postat Iunie 11, 2010 Se pare ca am gresit la functia if, adica nu citeam pinul care trebuia. Acum merge bine:d. Multumesc tuturor pentru ajutorul dat. $regfile = "m8def.dat"$crystal = 1000000$baud = 19200 ' default use 40 for the frame spaceDim A As ByteConfig Portd.2 = Input 'CONFIG PORTD.2 AS INPUTConfig Lcd = 16 * 2 'configure lcd screenConfig Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , _ Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6ClsLcd "BICLA"Wait 1ClsdoIf Pind.2 = 1 Then Lcd "buton activat" Wait 1 Cls End IfIf Pind.2 = 0 Then Lcd "butonul neapasat" Wait 1 Cls End IfloopEnd Acum am dat de alta belea :( .Configurez timer1 ca si counter, ii dau sa inceapa sa numere cu ajutorul "start timer1", asta bineinteles dupa ce opresc timer1. Bun, dar dupa aia cum citesc numarul contorizat de timer? Link spre comentariu
danzup Postat Iunie 12, 2010 Partajează Postat Iunie 12, 2010 dim t as Byte ' sau word daca folosesti timer pe 16 bitit = timer1 Link spre comentariu
iulian2010 Postat Iunie 14, 2010 Partajează Postat Iunie 14, 2010 Salutare, Doar ca idee puteti sa va inspirati. Codul este scris de un german si este functionabil. O alta idee ar fi sa construiti un mic meniu unde sa afisati si viteza in Km/h, ceasul, distanta si timpul in care parcurgeti un anumit traseu. Multa bafta! $regfile = "m8def.dat" 'ATMEGA 8$crystal = 16000000 '16 MHz Quartz$hwstack = 128$framesize = 128$swstack = 128 Dim Zaehler As WordDim Result As WordDim A As WordDim I As WordDim Timer_flag As ByteDim Ergebnis As Word'* BalkenanzeigeDeflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31'* TimerkonfigurationConfig Timer0 = Counter , Edge = FallingConfig Timer1 = Timer , Prescale = 256Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5Config Lcd = 20 * 2 'LCD-Modul 2x20Config Pind.4 = Input 'PD4 ist counterinput T0 / hier kommt der Ausgang vom TLE 4905L dranOn Timer0 Sprung_in_supOn Timer1 Timer_irqEnable Timer0Enable Timer1Enable InterruptsLoad Timer1 , 62750Cursor OffCls'* Displayanzeige für DrehzahlausgabeLocate 1 , 1Lcd "Drehzahl"Locate 1 , 15Lcd "RPM"'* HauptprogrammDo If Timer_flag = 1 Then Timer_flag = 0 Locate 1 , 9 Lcd " " 'Drehzahlwert in Anzeige löschen Ergebnis = Result * 60 'Umdrehungen pro Minute Locate 1 , 10 Lcd Ergebnis '* Balkenanzeige A = Result / 250 A = Ergebnis / 250 Locate 2 , 1 For I = 1 To 20 If A >= I Then Lcd Chr(0) Else Lcd " " End If Next End IfLoopEnd'* Unterprogramm für Timer 0Sprung_in_sup:Incr ZaehlerReturn'* Unterprogramm für Timer 1Timer_irq: Load Timer1 , 62750 Zaehler = Zaehler * &HFF Zaehler = Timer0 + Zaehler Result = Zaehler Timer0 = 0 Zaehler = 0 Timer_flag = 1Return Link spre comentariu
tilix_boss2008 Postat Iunie 16, 2010 Autor Partajează Postat Iunie 16, 2010 Iti multumesc iulian. Chiar mia fost foarte util. Lam convertit sa imi arate viteza in kmh:d. Si chiar merge de la 1kmh:)). Acum sa ma gandesc la jurnalier. Link spre comentariu
tilix_boss2008 Postat Iunie 18, 2010 Autor Partajează Postat Iunie 18, 2010 Programul dupa modificarile aferente. Acum mam gadit: daca tot am loc si spatiude ce sa nu imi pun cateva functii cat de cat ultile cum ar fi semnalizare si lumini. Leam implementat in program si imi afiseaza pe lcd, dar nu ii dau de cap sa imi activeze pinul de comanda al tranzistorul care aprinde ledurile. $regfile = "m8def.dat" 'ATMEGA 8$crystal = 8000000 '16 MHz Quartz$hwstack = 128$framesize = 128$swstack = 128Dim Numarator As WordDim Result As WordDim A As WordDim I As WordDim Timer_flag As ByteDim Rezultat As WordDim Pozitie As Byte'*Semnal dreaptaDeflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 ' replace ? with number (0-7)Deflcdchar 1 , 24 , 28 , 30 , 31 , 31 , 30 , 28 , 24 ' replace ? with number (0-7)'*Semnal stangaDeflcdchar 2 , 3 , 7 , 15 , 31 , 31 , 15 , 7 , 3 ' replace ? with number (0-7)Deflcdchar 3 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32'*Lumini aprinseDeflcdchar 4 , 3 , 5 , 9 , 17 , 17 , 9 , 5 , 3 ' replace ? with number (0-7)Deflcdchar 5 , 31 , 32 , 31 , 32 , 32 , 31 , 32 , 31 ' replace ? with number (0-7)'* Configurare TimerConfig Timer0 = Counter , Edge = FallingConfig Timer1 = Timer , Prescale = 1024Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5Config Lcd = 16 * 2 'LCD-Modul 2x16Config Pind.1 = OutputConfig Pind.2 = OutputConfig Pind.3 = OutputConfig Pind.4 = InputConfig Pind.5 = InputConfig Pind.6 = InputConfig Pind.7 = InputConfig Portc = Output 'PD4 ist counterinput T0 / hier kommt der Ausgang vom TLE 4905L dranOn Timer0 Sprung_in_supOn Timer1 Timer_irqEnable Timer0Enable Timer1Enable InterruptsLoad Timer1 , 62750Cursor OffCls'* Programul principalDoLocate 1 , 1Lcd "Viteza"Locate 1 , 14Lcd "kmh"If Timer_flag = 1 Then Timer_flag = 0 Locate 1 , 8 Lcd " " 'rotatii pe sec Rezultat = Result * 0.9 'Rotatii pe Minut Locate 1 , 9 Lcd Rezultat End IfIf Pind.6 = 1 Then Locate 2 , 1 Lcd " " Reset Pind.2 Waitms 300 Locate 2 , 1 Lcd Chr(2) Lcd Chr(3) Set Pind.2 Waitms 300 Locate 2 , 1 Lcd " "End IfIf Pind.7 = 1 Then Locate 2 , 1 Lcd " " Waitms 300 Locate 2 , 5 Lcd Chr(0) Lcd Chr(1) Waitms 300 Locate 2 , 5 Lcd " "End IfIf Pind.5 = 1 Then Waitms 500 If Pozitie = 0 Then Pozitie = Pozitie + 1 Set Pind.3 Locate 2 , 3 Lcd Chr(4) Lcd Chr(5) Waitms 100Else Pozitie = 0 Reset Pind.3 Locate 2 , 3 Lcd " " Locate 2 , 4 Lcd " " Waitms 100 End IfEnd IfLoopEnd'* Subrutina Timer 0Sprung_in_sup:Incr NumaratorReturn'* Subrutina Timer 1Timer_irq: Load Timer1 , 62750 Numarator = Numarator * &HFF Numarator = Timer0 + Numarator Result = Numarator Timer0 = 0 Numarator = 0 Timer_flag = 1Return 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