PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Designfrage



alex0801
10.08.2004, 19:15
HI@all,
hab mir mal ne Designfrage zu nem PIC16F84:

Ich verwende als Sprache cc5x (www.cc5x.de.vu) die mir sehr gelegen kommt da ich da nicht arg umlernen brauche und auch kein ASM lernen muss.
Ich will mit dem PIC ein 8x2 LCD Display (ja, das _muss_ so klein sein) ansteuern was ja auch recht gut klappt. Desweiteren brauch ich mehrere Eingänge.
Die Pinbelegung sieht bis jetzt wie folgt aus:

* Pinbenutzung:
* PIN| TYP | Verwendung
* ---+-------------+--------------------------
* 1 | RA2 |
* 2 | RA3 |
* 3 | RA4 / T0CKL |
* 4 | /MCLR |
* 5 | VSS |
* 6 | RB0 / Int | Bit0 LCD Register Select
* 7 | RB1 |
* 8 | RB2 |
* 9 | RB3 | Bit3 LCD Enalbe
* 10 | RB4 | Bit4 LCD Data
* 11 | RB5 | Bit5 LCD Data
* 12 | RB6 | Bit6 LCD Data
* 13 | RB7 | Bit7 LCD Data
* 14 | VDD |
* 15 | OSC2 | Quarz
* 16 | OSC1 | Quarz
* 17 | RA0 |
* 18 | RA1 |

Ich würd gern noch weitere 2-3 Tasten zur Bedienung anschließen. Desweiteren brauche ich einen Eingang für einen Durchflussmesser (liefert pro definierter Menge einen Impuls via Hall-Sensor),
einen Raddrehzahlsensor (ebenfalls Halleffekt weil wartungsfrei) und
einen Temparaturfühler für die Öltemperatur.

Das ganze soll ein Mini-Bordcomputer für's Motorrad geben und ich frag mich grad was am sinnvollsten vom anschließen her ist und wie ich das mit dem Interrupt mache.

Das Register-Select des Displays lässt sich sicher umlegen auf was anderes (muss mal die File zum ansteuern des LCDs angucken) damit der Pin frei wird.
Nur wie und was mach ich mit dem Interrupt. Programmieren kann ich, nur hab ich bisher noch nix mit Interrupts direkt zu tun gehabt.
Soll ich alle Taster und Eingänge mit dem Interrupt-Pin koppeln oder in einer Endlosschleife die EIngänge abfragen oder wie bewerkstellige ich das am besten?

Meine zweite Frage wäre folgende:
Was schlagt ihr bzgl. der Temperaturmessung vor ? Was ist am einfachsten und zuverlässigsten ? Muss nicht supergenau sein, darf auch +-5°C abweichung haben, so genau brauch ichs nicht. Ach ja: Messbereich bis ca. 100°C, nach unten ... hmm, sagen wir ab 0-10°C ....

Dritte Frage:
Meint ihr ein PIC16F84 ist überfordert mit Raddrehzahlerfassung und der Berechnung der Geschwindigkeit ? Will zusammen mit dem Durchflussmesser eine Durchschnittsverbrauchsanzeige mit realisieren...Der PIC muss unter Umständen also ganz schön rechnen.
Raddrehzahlmessen mach ich doch am besten über den Timer mit externem Input, oder ? Dann muss ich auch RB4 umverlegen ?!
Und gleichzeitig die Impulse des Durchflussmessers zählen... hmm, die dann wohl über Interrupt an RB0 ...

Naja, wär klasse wenn ihr mit da n paar Anregungen geben könntet.
Will nicht unbedingt nen größeren PIC nehmen da ich mir dann erst wieder n Experimentierboard und nen Programmer bauen darf. Prinzipiell ist mir die Tankuhrfunktion am wichtigsten. Wenn der Rest zu viel wird kann ich auch was weglassen.

KOmm ich evtl mit dem PIC16F628 weiter ? Den kann ich mit meinem Programmer auch noch beschreiben...

Danke,
- Alex

alex0801
11.08.2004, 17:31
man, hat denn keiner ne Ahnung hier ?

hab auch schon wie wild gegoogelt .. hab aber nix gefunden....


- Alex

D.Stolarek
12.08.2004, 07:12
hi alex
mir wurde heufig geraten den 16f627 oder den 16f628 PIC zu benutzen da die um vieles besser sind als die 16f84 / a
die können mehr und kosten weniger und die bauen auf dem 16f84 auf
ich habe selber angefangen mit 16f84a
also naja mehr kann ich nich sagen

12.08.2004, 09:32
jo, hab mir den auch schon bestellt. Muss nur noch checken was der alles mehr kann.
Aber auch bei diesem Chip sind meine Fragen noch unbeantwortet...
Programmiert denn keiner hier mit Interrupts ?

Meine Grundlegende Frage ist immernoch die:
Bei nem PC isses ja so. Alles was so im PC drinsteckt kann einen interrupt auslösen.. Nur gibts da eben mehrere. Mein PIC hat nur einen (zumindest der PIC16F84). Wie stell ich das jetzt an wenn ich mehrere "Geräte" per Interrupt "überwachen" will ?

- Alex

Jooker
12.08.2004, 09:57
Bei nur einem Interrupt wird bein auslösen geguckt
wer diesen ausgelöst hat und führt dann den entsprechenden Code aus.

12.08.2004, 10:46
ja aber da sind ja die möglichkeiten begrenzt. Nicht alle Pins können Interrupts auslösen. Wenn ich jetzt alle "Interruptfähigen" Pins bis auf einen anderweitig belegt habe und jetzt 3 Eingänge habe die Interruptüberwacht werden sollen... wie mach ich das Schaltungstechnisch..
Könnte mir vorstellen daß meine 3 zu überwachende eingänge zusätzlich noch den einen freien interruptpin auslösen und die software die 3 pins dann noch schnell abfragen muss.. Is nur die Frage wie schnell das geht und wielange mein Signal da sein muss damits erkannt wird.

- Alex

12.08.2004, 10:51
ok, wie ichs elektronisch verschalte weiß ich jetzt (alle weiteren Eingänge die interruptfähig werden sollen per ODER verknüpfen und ergebnis auf Interrupt-Eingang legen).
Jetzt ist immernoch die Frage: Wie schnell funktioniert das ganze ?
Wie lange muss grob geschätzt ein Signal anliegen bis ich per IF-Abfrage die Eingänge gecheckt hab ?

- Alex

Jooker
12.08.2004, 11:17
Grob geschätz sag ich mal kurz...
Als erstes sperrt du in deiner Interrupt Routine die Interrupts
und hast von an alle Zeit der Welt auszuwerten welcher Interrupt
sich da gemeldet hat.

12.08.2004, 11:41
du hast mein problem nicht verstanden...
Nochmal n Beispiel:
Ich habe 3 PINS die NICHT Interruptfähig sind. Und ich habe einen Interruptfähigen PIN. Um jetzt für alle 3 PINs Interruptfähigkeit zu bekommen verknüpfe ich diese mittels ODER und gebe das Ausgangssignal des ODERs auf den INterruptpin.
Wenn jetzt einer der 3 PINs eine 1 bekommt kommt die am uC an ihrem eigenen PIN an und gleichzeitig krieg ich ein Interruptsignal. Jetzt muss ich in der Interruptroutine meine 3 PINs abfragen wo denn die 1 herkommt (da es ja kein Interruptunterstützer PIN war und ich hier n workaroundlösung hab).
Und jetzt ist die Frage wie schnell ist die INterruptroutine mit den 3 IF-Abfragen für die 3 PINs ?

- Alex

Jooker
12.08.2004, 12:10
Ach so jetzt hab ichs kapiert.
Also wenn das Signal was an den jeweiligen Pin kommt
lang genug ist müsste das klappen.

Jetzt nur mal grob überschlagen:
bei 4Mhz ist der Interne Takt 1Mhz, das ist dann eine
Zykluszeit von 1µs.
Um in die Interruptroutine zu kommen 10 Zyklen und für die Pinabfrage auch noch mal 10 (alles jetzt nur geschätzt)
würde 20µs ergeben. Wenn dein Signal also länger ist sollte es gehen.
Theoretisch....

Felix G
12.08.2004, 12:27
Und wenn es nicht reicht, musst du halt dafür sorgen, daß die Signale lang genug sind.
Also du musst sie irgendwie zwischenspeichern bis du mit der Abfrage fertig bist.

Im Prinzip könnte man ja ein Monoflop in jede Leitung hängen, das sicherstellt daß jeder Impuls mindestens 100µs lang ist.
Aber es gibt sicherlich auch einfachere/bessere Lösungen dafür (kenn mich da nicht so gut aus)