PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zähler mit Vorwahl



bronco117
26.03.2008, 13:17
Hallo Zusammen,
ich wollte mal einen Zähler programmieren der Impulse zählt.Die werden dann auf einen Display anzeigt. (Der Zähler funktioniert wie der von Hengstler Tico 734)
www.hengstler.com/gfx/file/shop/counter/manual/tico_734_7_2734007.pdf
Leider ist der originale Zähler viel zu groß für mich. Deshalb wollte ich ein 8 x 2 LCD Display für meine Anwendung nehmen. Vielleicht könnt Ihr mir mit der Programmierung auf die Sprünge helfen, bin da ein Anfänger drin. Der Zähler soll hoch und runter zählen können. Und durch einen Voreingestellter Wert, soll ein Ausgang gesetzt werden. Das durchsteppen durch die Zählermenüs soll mit einer Auswahltaste geschehen. Eine Reset Taste setzt den Zähler auf 0.
Hab da schon was programmiert (den Zähler, Up):


'Display Anschluss (Display 2 x 8)

' Rs = PortD.0
' RW = Port Auf Masse
' E = PortD.2
'Db4 = PortD.4
'Db5 = PortD.5
'Db6 = PortD.6
'Db7 = PortD.7

'Eingänge // Ausgang
'"Eingang" Impuls vom Sensor = PortC.3
'"Eingang" mit der Taste wird die Zählart gewählt 'AUSWAHL' = PortC.0
'"Eingang" mit der Taste wird der Wert im Display auf 0 gesetzt'RESET' = PortC.1
'"Ausgang" Port wird gesetzt,wenn der voreingestellte Zählwert erreicht ist = PortC.2

'Auswahlmöglichkeiten mit der Taste 'AUSWAHL'

'Count-up (bei jedem Impuls zählt der Zähler immer um 1 hoch)
'Count-do (der gezählte Wert von Count-up wird bei jedem Impuls bis nach 0 immer um 1 runtergezählt)
'Count-Pr (hier kann man einen Wert einstellen, wird der erreicht wird der Ausgang gesetzt)

'Funktion der Taste 'Reset'

'Im Count-up und Count-do Betrieb wird der Zähler auf 0 gesetzt
'Im Count-Pr Betrieb dient die Taste zum durch steppen der 8 Stellen. Und mit der Taste Auswahl wird der Wert von 0-9 gesteppt.


'initialisierung
'$sim 'sim Modus
$regfile = "m8def.dat"
$crystal = 8000000
Config Portc.0 = Input 'Taste Auswahl
Config Portc.1 = Input 'Taste Reset
Config Portc.3 = Input 'Impuls
Config Portc.2 = Output 'Ausgang


Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.2 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcd = 16 * 2



Taste_auswahl Alias Portc.0
Taste_reset Alias Portc.1
Ausgang Alias Portc.2
Impuls Alias Portc.3



Dim Count_up As Bit
Dim Count_down As Bit
Dim Count_preset As Bit
Dim X As Byte
Dim Flag As Byte


'-----Startbildschirm für 2 Sekunden------
Cls
Locate 1 , 1
Lcd "Counter "
Wait 2
'-----------------------------------------


'-----Hauptprogramm----------------




'---------------------------------

'Subroutinen

'-----Count-up-----------------
Count_up:
Cls
Cursor Off
Locate 1 , 1
Lcd "Count-up"
Locate 2 , 8
Lcd "0"

Do
If Pinc.3 = 0 Then
Incr X
Locate 1 , 1
Lcd "Count-up"
Locate 2 , 8
Lcd X
While Pinc.3 = 0
Wend
End If
Loop
End


'--------------------------






'------Count-down----------
Count_down:
Locate 1 , 1
Lcd "Count-do"


Return

'--------------------------





'------Count-preset--------
Count_preset:
Locate 1 , 1
Lcd "Count-pr"


Return

'--------------------------

Meine Probleme:
- Zählt der Zähler > 9 dann verschwindet z.B bei der 10 die 0. Und auf den Zähler steht dann eine 1?
- Wie kann ich den Wert mit der Reset Taste wieder auf 0 setzen?
- Wie kann ich den Wert speichert, wenn die Spannung ausgeschaltet wird?

Hat Jemand eine Idee wie ich den Zähler rückwärts laufen könnte (Zähler down). Der Wert soll von Zähler Up übernommen werden. Und wie ich eine Vorwahlzahl einstellen könnte?

mfg
Marius

Felix H.
26.03.2008, 16:23
Hi Marius,

es gibt sicherlich einige Leute hier die dir helfen wollen. Allerdings wäre ein Schaltplan eventuell ganz gut =)

Wie hast du das mit der Auswahltaste realisiert? Einfach ein Taster bei dem ich draufdrücke und der "Soll-Wert" erhöht sich dann immer um eins oder wie?

Den Wert Rückwärts laufen lassen... hmm entweder einfach per Umschalter.

Wofür brauchst du es denn? Der Beschreibung nach will stu vielleicht eine Trafowickelmaschine bauen? (ist nur ne vermutung) ;-) oder willst du einfach umdrehungen zählen? Das würde ich mit ein paar Lichtschranken am Anker realisieren. Das Zählt dann je nach Laufrichtung gleich hoch oder runter...

Gruß
Felix

Felix H.
26.03.2008, 16:53
ooh ich lese es gerade.... sorry wegen der frage mit der Auswahltaste...

Naja ich hab gerade ein wenig in der Hilfe von Bascom studiert und jetzt kann ich endlich daten in den EEPROM speichern *freu* ist ja wirklich mehr als einfach. Aber leg erst einmal einen schaltplan dazu ab ;-)

helimike0705
26.03.2008, 18:12
zu deiner 10 in der anzeige:
die 10 wird in die 8 spalte geschrieben ,also die 1 in die 8te und
0 in die neunte -> die du aber leider nicht hast (display 2x8 zeichen).

also setzte den locate auf 7 und schon hast du 10 angezeigt.

mike

bronco117
26.03.2008, 21:42
Hallo Felix, ich wollte damit Typenschilder zählen. Der Schaltplan ist ganz einfach. Display , der Controller, und zwei Tasten. :-) Aber ich mach den morgen mal fertig. Wollte erstmal alles auf den STK500 ausprobieren.

Hallo Mike, das mit der Stelle hab ich schon herausgefunden, nur leider, wenn der Wert 8 stellig ist dann muss ich ganz am Anfang (links) meine Zahl setzen. Das sieht nicht so toll aus. Gibt es ein Befehl? Wenn die 9 (99,999...) erreicht ist, dann schreibe das nächste Ergebnis um eine Stelle weiter?

Danke für eure Hilfe...

Marius

helimike0705
27.03.2008, 15:46
shiftlcd, schaue dir mal in der hilfe von bascom den befehl an.

mike