Sari la conținut
ELFORUM - Forumul electronistilor

Computer pentru bicicleta


tilix_boss2008

Postări Recomandate

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 :jytuiyu

Link spre comentariu
  • Răspunsuri 17
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • tilix_boss2008

    10

  • danzup

    3

  • iulian2010

    2

  • yo9hnf

    1

Top autori în acest subiect

Pai ... tu spuneai :

.....dar cand vreau sa bag semnal cu ajutorul unui buton pe un pin nu mi-l citeste

prin 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

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 :nebunrau:

Link spre comentariu

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

$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

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 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

Chef esti boss atunci daca zici ca merge. Rezistentele pull-up interne nu leam activat :jytuiyu . 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 :da .

Link spre comentariu

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

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

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

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

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