PIC programmeren, doel Gear Position Indicator

Dames en heren,

Wat ik zoek, lijkt mij heel simpel, maar is ingewikkeld genoeg om zelf even het bos door de bomen niet meer te kunnen zien..

Mijn motorfiets heeft 6 versnellingen, er zit een sensor op die van 0 tot 5v aangeeft in welke versnelling de fiets staat.

Hoe kan ik met behulp van een PIC (16F88?) het voltage omzetten naar een getal op een 7 segment LED display?

Er zijn DIY versies op het net te vinden, maar geen van allen maakt gebruik van een PIC.. Is deze ongeschikt voor een dergelijke functie of te traag o.i.d.? Men gebruikt een PICAXE, is dit hetzelfde als een PIC en kan ik die dus met de ICSP programmeren?

Als ik eenmaal weet of het lukt, ga ik voor het eerst in mijn leven proberen een schema te maken en als het programmeren (code) simpel is, hoop ik dit ook te doen.

Mijn doel is eigenlijk niet alles maar te kunnen, meer alleen om nu een GPI te maken en daarna zien we wel weer verder (vaak snel uitgekeken en eenmaal doel behaald vind ik het niet leuk meer, of het is simpelweg te ingewikkeld voor mij en heb ik het geduld er na enkele weken niet meer voor)...

Alle input en hulp is welkom, ik vraag niet om een compleet voorgekauwd iets, maar uiteindelijk MAG dit wel haha, vind het leuk om te bouwen maar heb er nog steeds te weinig verstand van.

De bijhorende voltages (gevonden op het net):
Gear Position Switch Voltages (Measured while under way)
Neutral 5.07
1st 1.40
2nd 1.81
3rd 2.55
4th 3.28
5th 4.16
6th 4.61

Bedankt!

Shiptronic

Overleden

Ik zou beginnen met een PIC die een analoog kanaal heeft.
Kijk eens op de site van PICbasic.nl, daar staat voldoende info om te vertrekken. Zoek ook eens op de poste van Joop, die heeft ook al eens een gear indicator gemaakt

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Met 1 site al meteen iets geleerd, Proton, Basic omzetten naar assembler (laatste heb ik hier onlangs nog geleerd haha).

"nu alleen nog even" Basic leren :)

Zal ook eens op de posts van Joop zoeken.
Maar vaak gebruikt men voor de GPI een VSS of hall sensor + rpm + snelheid om de versnelling te bepalen, iets wat nu onnodig is omdat er een kant en klaar pakketje (0~5v) uit de fiets komt.

Bedankt in ieder geval! ik ga eens even goed lezen.

houd er ook rekening mee dat deze spanningen of de meting van de pic kan beinvloed worden door omgevingstemperatuur.

ik weet dat pics heel compact zijn, maar kan je dit niet beter met een arduino doen? want je hebt al 1 analoge ingang nodig, en ook een aantal uitgangen (7segment display heeft dus 7 segmenten aan te sturen, maar je kan er wel samennemen die altijd samen branden)

ik hou van werken ..., ik kan er uren naar kijken

Waarom Arduino aanbevelen als TS aangeeft met een PIC aan de gang te willen gaan?
1 analoge ingang en zeven digitale uitgangen. Een beetje PIC heeft dat wel.
Voor het aansturen van een 7 segments display is zat op internet te vinden, dus dat is vrij simpel te realiseren. Wel even opletten of je common anode of common cathode gebruikt.
Als je PicBasic gebruikt kun je met een Pic zonder analoge ingang altijd het POT commando gebruiken.

Kijk ook eens bij Amicus18. Gratis compiler (PicBasic), zonder beperkingen behalve dat het met slechts 1 of 2 typen processoren werkt (in ieder geval de 18F25K20).

[Bericht gewijzigd door hadv op woensdag 22 april 2015 22:01:07 (16%)

Just find out what you like and let it kill you

Nouja ik ben niet helemaal gebonden aan de PIC maar ik heb er toevallig nog 1 liggen en ik heb de benodigde programmer.

Heb zojuist al Proton IDE gevonden.
Zoals ik al zei, het is eenmalig, leuk om eens naar de mogelijkheden te kijken, maar niet de moeite waard om een ontwikkelpakket van 180 euro te kopen.

Een gipro GPI kost kant en klaar 80 euro maar daar zit geen uitdaging in.
Of dit goed uit gaat pakken kan ik op dit moment ook nog niet zeggen want waarschijnlijk denk ik er weer veel te licht over..

Heb nog wel een Raspberry pi liggen, als het daar makkelijker mee kan, dan wil ik hthet ook wel proberen. Maar dan moet ik geen boottime of GUI hebben want wik geen (touch)screen op de motor bouwen :p
Wel heb je dan meer uitbreidingsmogelijkheden, zoals bijv. een diy instrumentencluster :D

maar dat word weer veel te veel, een heel simpele gpi is gewoon grappig, ik rij er niet minder goed om ofzo.

Zit overigens ziek (longonteking en griep) thuis dus moet ff iets hebben om mee aan de slag te kunnen.

Ik heb trouwens beide varianten liggen, 7 segment common anode en cathode dus kan kiezen ;)

Heb nog wel een Raspberry pi liggen, als het daar makkelijker mee kan, dan wil ik hthet ook wel proberen.

haha, dat lijkt mij heel erg overkill. Overigens heeft een RBP alleen digitale pinnen dus je moet nog een stukje elektronica maken om analoge voltage's te kunnen meten (en je zit met je boot tijd van een halve minuut). Ik denk even dat je het type PIC even moet posten, dan kan er gekeken worden of het een analoge ingang heeft.

Op 22 april 2015 21:49:29 schreef hadv:
Waarom Arduino aanbevelen als TS aangeeft met een PIC aan de gang te willen gaan?

Ik snap die aanbeveling voor een Arduino wel als je nog weinig of geen ervaring hebt met micro controllers. Er zijn namelijk zo veel voorbeelden en voor geprogrameerde library's voor te vinden. Persoonlijk zou ik voor dit project voor een ATtiny84 gaan. analoge pinnen in, en genoeg pinnen om een segments displaytje aan te sturen
bv http://lukemiller.org/index.php/2012/10/attiny84-led-display-and-heate…
Maar als je echt nog geen ervaring hebt dan is zo'n kant en klaar Arduino boardje wel makkelijk.

Ik heb ook met PIC's gewerkt. En zo'n projectje als dit moet voor een beginner ook wel goed te doen zijn. Er zijn vast voorbeelden van een analoge port inlezen en een segments displaytje aan sturen. Wil je later meer, zoals complexere display's aan sturen, of communiceren met bijvoorbeeld je OBD port, dan is het wel lastiger om hier voorbeelden van te vinden voor de PIC.

[EDIT] Oh ik zie nu pas dat je al gezegd heb welke PIC het is, de 16F88 Die heeft analoge inputs, dus wat je wilt moet hier prima mee kunnen. Alleen is mijn PIC Basic zo verwaterd dat ik je niet verder kan helpen.

Een 16F88 kan dat op zijn dooie gemak, het enige wat ik zie als probleem zijn de analoge stappen.
De getallen die opgegeven, zijn hoe exact zijn die, en welke afwijking hebben die tijdens het rijden.
Dit is belangrijk om goed onderscheid te kunnen maken, zodat het display een stabiele uitlezing heeft.

LDmicro user.

Op 22 april 2015 22:42:09 schreef MGP:
Een 16F88 kan dat op zijn dooie gemak, het enige wat ik zie als probleem zijn de analoge stappen.
De getallen die opgegeven, zijn hoe exact zijn die, en welke afwijking hebben die tijdens het rijden.

1024 stappen is toch ruim genoeg om 7 waardes te onderscheiden? je moet gewoon kijken of de gemeten waarde tussen twee waardes zit.

1st 1.40
2nd 1.81
3rd 2.55

Je zit in je tweede versnelling als de gemeten waarde tussen de 1.605V en de 2.18V zit. als 5V 1024 is, dan moet je gelezen waarde tussen de 371 en de 446 zitten. Dat zijn 75 stappen marge.

Op 22 april 2015 22:15:20 schreef sanscorp:
Heb zojuist al Proton IDE gevonden.
Zoals ik al zei, het is eenmalig, leuk om eens naar de mogelijkheden te kijken, maar niet de moeite waard om een ontwikkelpakket van 180 euro te kopen.

Hmmm, als je onder een bepaalde hoeveelheid code bleef, mocht je dit pakket gratis gebruiken geloof ik. En jouw projectje moet zeker in dat stukje code passen denk ik. Maar zoals ik al zei, is het een tijd geleden dat ik het gebruikt heb, dus is dit misschien alweer veranderd. Heb je wel een breadboardje met wat draadjes? Dit is wel redelijk onmisbaar om een beetje te experimenteren.

[Bericht gewijzigd door Satoer op woensdag 22 april 2015 22:55:13 (34%)

Arco

Special Member

Weet je zeker dat het een analoge uitgang is? (is nogal bijzonder, alles wat ik vind is gewoon digitaal, daar zijn ook massa's kant en klare oplossingen voor...)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 22 april 2015 22:43:31 schreef Satoer:
Je zit in je tweede versnelling als de gemeten waarde tussen de 1.605V en de 2.18V zit. als 5V 1024 is, dan moet je gelezen waarde tussen de 371 en de 446 zitten. Dat zijn 75 stappen marge.

Dat weet ik ook, maar hoe meet je dat als je 100km van elkaar woont(geschat). ;)

Mijn programma is al klaar, had eventjes een half uurtje tijd.
Zelfs de segmenten zijn gemultiplext, zo spaar je 6 weerstanden uit.

Het is nog niet getest en zoals Arco schrijft, heb ik ook mijn twijfels over de output van die versnellingsbak.

LDmicro user.

Hier astablaft (zou Jaap Kooiman zegge...)
Effe een zetje in de goeie richting..zat me toch maar te vervelen..
http://www.uploadarchief.net/files/download/gear1-590.jpg

image upload heeft kuren...
>>>Dit is geen geldige afbeelding. Controleer de URL en probeer opnieuw./<<< kan een Mod dit voor mekaar krijgen?

gelukt...

De tabel geeft de waarden weer die overeenkomen met de versnelling.
Ik heb rond de waarde van de betreffende versnelling een window gemaakt. Je kunt gewoon de 8 bits(256) resolutie gebruiken.1024 heeft verder geen zin,want 5/1024=4,8mV en 5/256=19,5mV terwijl de afstand tussen 2 versnelling al groter is.
In de hex kolom staan de waarden waarbij iets gedaan moet worden, en de display kolom geeft aan wat er op het display te zien moet zijn.
Huiswerk: Datasheet 16F88 "effe" doorlezen..,display benummering,en effe assembler leren.(kost je een week..maar daarna jaren plezier en verslaafd)

edit: ik kwam iemand tegen met andere waarden maar die vallen precies binnen de grenzen van het window.Misschien dezelfde fiets?
1st: 1.36V
2nd: 1.77V
3rd: 2.49V
4th: 3.23V
5th: 4.1V
6th: 4.55V
N: 5V
http://www.svrider.com/forum/archive/index.php/t-116723.html
ps. Ontstoring van alle spanningen dmv filters is heel belangrijk.

Re-integratiecoach uitgerangeerde en degoutante electronen

woef!

dank u! :D
ik zal de voltages eens meten bij starionair en rijdend bij diverse toerentallen om te zien hoeveel variatie er in zit. alternator levert zo rond de 14v vandaar dat neutraal in mijn eerste post bovem de 5v zit, die test is namelijk rijdend gedaan.

Verder woon ik in Almere ;)

het input signaal filteren kan het best met 220uF 16v condensatoren denk ik? of moet ik al veel lager gaan zitten / denken voor een filter?

Tja het is lastig als je nog zo weinig kennis hebt, aan de ene kant wil ik heel graag meer leren, en aan de andere kant is het via internet niet te doen omdat je overal wel wat anders leest.

componenten voor dummy's boek halen wellicht. Want als je zoekt op electrotechniek krijg je hoe je installaties in huis aanlegt.

en assembler in 1 week leren?! Hoe dan?
Is mijn grootste probleem misschien discalculy? Ik zie heel slecht de verbanden in formules en heb daarom misschien zo veel moeite met het oppakken van simpele programmeertalen. Ik weet niet eens hoe jullie aan de 1024 (16 bit?) en 256 8 bit komen en waarom dat belangrijk zou zijn. Wat ik denk te begrijpen is dat je verdelingen maakt door het voltage door het aantal bits te delen en je zo een werkruimte creëert waarbij je aan 8 bit genoeg hebt omdat het bereik niet zou dicht bij elkaar ligt?

Ik weet dat je ergens moet beginnen, ik ben eerlijk gezegd ook al een hele tijd bezig met het (na)maken van DIY projecten van anderen, zolang het maar compleet is kan ik het wel bouwen en snap ik ongeveer wat wat doet en waarom het iets doet.

in jouw pic zit een analoge to digitale converter.
bv een 10bit kan 1024 verschillende waardes aannemen (0000000000 tot 1111111111).

als je een 0-5V spanning omzet naar digitaal, dan is elke bitverhoging ongeveer 0.005V

als je nu kijk naar je versnellingen, dan zit er tussen de 1e en 2de al 0.410V verschil (1.36V tot 1.77V). (hier kan je dus meten 1.360 of 1.365V)

een 8bit gaat maar tot 256 combinatie, elke bit is hier dan 0.020V (hier kan je dus bv meten 1.360 of 1.380V).

het is dus nutteloos de hoge precisie te gebruiken van 10bit

ik hou van werken ..., ik kan er uren naar kijken

ja precies, dat bedoelde ik ook maar het stond er een "beetje" cryptisch haha.

Als het verschil (en dus window) kleiner was geweest dan had je wel aan de 1024 gemoeten.

Shiptronic

Overleden

Zelfs met 4bit heb je ruim voldoende ;)

5/16= 0.3125 /Stap

code:


             
  [V]          [Gear]   
   0  = 0000 = F(out sluiting naar massa)
0,3125= 0001 = 1
0.6250= 0010 = 1
0.9375= 0011 = 1 
1.2500= 0100 = 1
1.5625= 0101 = 1
1.8750= 0110 = 2
2.1875= 0111 = 2
2.8125= 1000 = 3
3.1250= 1001 = 3
3.4375= 1010 = 4
3.7500= 1011 = 4
4.0625= 1100 = 5
4.3750= 1101 = 5
4.6875= 1110 = 6
5.0000= 1111 = N

[Bericht gewijzigd door Shiptronic op donderdag 23 april 2015 09:23:22 (84%)

Wie de vraag stelt, zal met het antwoord moeten leren leven.

De resolutie is minder belangijk, belangrijker is de stabiliteit van het signaal.
Een grote elco aan de ingang is niet goed omdat de AD converter graag een weerstand ziet tussen de 5 en 10K.
Een choke in serie zou kunnen, met een kleine C (10nF) en 10k parallel, maar dat zal experimenteel vastgesteld moeten worden.

Misschien eens nadenken om het signaal bij elke versnelling in het eeprom geheugen te bewaren en op te slaan tijdens het proefrijden, zodat de waarden niet op voorhand moeten ingegeven worden.

Je moet dan enkel op voorhand weten hoeveel 'window' je moet ingeven rond de centrale waarde, en daarvoor moet je de stabiliteit van het signaal weten.

LDmicro user.
Lambiek

Special Member

Nou het kan met 8 bits ook prima werken hoor. 5 : 255 = 0.0196078 per stap.

Als we rekenen met 0.0196:
Waarde eerste versnelling: 1.40 : 0.0196 = 71.xxx.
Waarde tweede versnelling: 1.81 : 0.0196 = 92.xxx.
Waarde derde versnelling: 2.55 : 0.0196 = 130.xxx.
Waarde vierde versnelling: 3.28 : 0.0196 = 167.xxx.
Waarde vijfde versnelling: 4.16 : 0.0196 = 212.xxx.
Waarde zesde versnelling: 4.61 : 0.0196 = 235.xxx.

De waarde achter de .xxx is kleiner dan vijf, dus je kan met het getal voor de punt aan het werk.

Voorbeeld eerste versnelling:
If WAARDE > 65 THEN
IF WAARDE < 77 THEN
PRINT AT 1,1,"1"
ENDIF
ENDIF

En zo doe je het met iedere versnelling. Dit is maar een voorbeeld, het kan ook nog op andere manieren natuurlijk.

Als je haar maar goed zit, GROETEN LAMBIEK.

dat is basic toch?
veel beter te begrijpen dan assembler zo op het eerste oog.

Ik zal zo eens rustig gaan zitten nadat ik de waarden nog eens nagemeten en op stabiliteit gecontroleerd heb.

Lambiek

Special Member

Ja dat is basic. Het kan ook met het commando CASE, SELECT, en ENDSELECT.

Kijk even bij www.picbasic.nl

De print opdracht zal je even aan moeten passen, dat werkt alleen als je een display gebruikt. Jij zal dus een paar uitgangen moeten gebruiken om je zeven segment led display aan te sturen. Maar dat is ook niet spannend.

Als je haar maar goed zit, GROETEN LAMBIEK.

Je kun ook met 3 variabelen werken.

WAARDE (0-1023 res.)
MIN = WAARDE + 100
MAX = WAARDE - 100

In Lambieks voorbeeld heb je dan:

Voorbeeld eerste versnelling:
If WAARDE > MIN THEN
IF WAARDE < MAX THEN
PRINT AT 1,1,"1"
ENDIF
ENDIF

Dan moet je niet telkens alle getallen veranderen.

LDmicro user.
Lambiek

Special Member

@ sanscorp,

Het voorbeeld van MGP kan ook, let wel op dat dit een voorbeeld is met een 10 bit waarde. Ik had een voorbeeld met een 8 bit waarde.

En let ook op je hardware. Je kan het beste je analoge signaal bufferen met een opamp, en je 7 segment led display aansturen met bijv. een ULN2803. Dit om ellende te voorkomen.

Als je haar maar goed zit, GROETEN LAMBIEK.

uhhh mijn pva is nu:
- Voltages uitlezen (ff in schema motorfiets kijken en draad zoeken)
- picbasic.nl doorlezen
- datasheet pic16F88 doorlezen
- methode kiezen
- bordje "verzinnen" (heb een goed breadboard)
- code schrijven

en tussen alle stappen in veel vragen stellen hier :D

Zou je niet beter eerst eens op zoek gaan naar de gegevens van die versnellingsbak, hoe dat elektrisch in elkaar zit.
Niets is frustrerender dan een schakeling in elkaar zetten waarvan je achteraf inziet dat je verkeerd begonnen bent, omdat je de juiste gegevens niet had.

Dan hangt die pic, achteraf, waarschijnlijk ergens tegen de muur :+

LDmicro user.
Lambiek

Special Member

Op 23 april 2015 10:16:36 schreef MGP:
Zou je niet beter eerst eens op zoek gaan naar de gegevens van die versnellingsbak, hoe dat elektrisch in elkaar zit.

Op 23 april 2015 09:34:42 schreef sanscorp:
uhhh mijn pva is nu:
- Voltages uitlezen (ff in schema motorfiets kijken en draad zoeken)
- picbasic.nl doorlezen
- datasheet pic16F88 doorlezen
- methode kiezen
- bordje "verzinnen" (heb een goed breadboard)
- code schrijven

De volgorde van handelen klopt wel. :)

Als je haar maar goed zit, GROETEN LAMBIEK.