Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Zähler
Kann mir jemand helfen…?
Ich habe das C-Control/Basic mit angeschlossenem Application Board.
Am AD[1] ist ein Taster angeschlossen.
Wird der Taster nicht gedrückt ist am AD[1] der wert 255
Wird der Taster gedrückt ist am AD[1] der wert 0
Ich möchte eine art Zähler bauen.
Wenn man den Taster einmal drückt soll auf dem LCD   001 zu sehen.
Wenn man den Taster nocheinmal drückt soll auf dem LCD   002 zu sehen sein. 
Und das dann bis   999.
 
Ich habe nur so meine Schwirigkeiten das zu Programmieren.
Robothomas
04.07.2005, 12:46
Hallo Speed!
Wenn du noch keine Erfahrung im Programmieren hast, würde ich dir vorschlagen, dass du einen Ablaufplan erstellst, der dann nach Fertigstellung in Basic umgesetzt wird. Nätürlich ist solch ein Plan nicht unbedingt notwendig, besonders für kurze, einfache Programme, erleichtert aber gerade dem Einsteiger ungemein die Arbeit. Bspw. benötigst du eine Schleife, in der der Port, an dem der Taster angeschlossen ist, abgefragt wird und ein interner Zähler sowie die Textausgabe der LC-Anzeige aktualisiert wird. Umgesetzt wird dies z.B. mit einer IF-Abfrage des Ports, um dann eine Integer-Variable um eins zu erhöhen. Dann springst du wieder an eine Marke, die du vor dem Schleifenanfang definiert hast. Schließlich mußt du noch mit einer weiteren IF-Abfrage bestimmen, was passieren soll, wenn der Zähler 999 erreicht hat. Schau dir mal die Beispielprograme an, die du auch unter www.c-control-support.de herunterladen kannst.
MfG,
Robothomas
Ich habe ein Programm geschrieben das alle 15 Minuten den AD[7] wert abfragt, und die werte auf dem EEPROM speichert. 
Wenn ich dann Taster betätige ( AD[1] ) werden die gesamten Messdaten über das Hyperterminal ausgelesen.
Den Zähler brauche ich um zu sehen wie viel werte schon gespeichert sind.
Ich weiß jetzt nur irgendwie nicht wie man die Integer-Variable(n) schreibt.
mfg
Speed
Hallo Speed,
stell doch Dein Prog hier 'mal ein! Das ist viel einfacher.
Übrigens: Für den Taster brauchst Du keinen A/D-Wandler-Eingang, sondern nur einen Digitalport, weil es ja nur 2 Werte (An/Aus) geben kann!
Gruß Dirk
Hier ist das Programm:
' --- Definitionen ---
define count word
define value word
define lastsec byte
define key ad[6]
define led port[1]
define sensor ad[7]
' --- Programmoperationen ---
count = 0
led = 0
lastsec = 0
open# for write
close#
#loop1
  if second = 0 and second <> lastsec then gosub log
  lastsec = second
  pause 4200
#loop2
  
  if key=0  then gosub dump
  
  pause 20
if led then goto loop2 else goto loop1
#log
  beep 100, 10, 0
  open# for append
    if filefree then print# sensor else goto filefull
  close#
  count = count + 1
return
#filefull
  close#
  led = ON
return
#dump
  print
  print count, " Messwerte"
  open# for read
#dumpnext
  if eof then return
  input# value
  print value; " ";
goto dumpnext
mfg
Speed
Hallo Speed,
Was mir auffällt:
1. Mit print# werden WORDs gespeichert, so dass du je 2 Messwerte zusammenfassen könntest und in einer Speicherstelle ablegen. Gespeichert wird dann alle 2 Sekunden.
2. "led" ist bei dir ein Ausgang, an dem eine LED hängt. Da macht es keinen Sinn, led in einer IF-Abfrage zu verwenden. Dazu müsste led ja ein Eingang sein.
3. In dem dump-Teil würde ich close# nicht nehmen. Stattdessen steht es ja in #filefull und muss noch in #dump.
4. "pause 4200" Warum so lange Pause? Da kann der Test auf die Sekunde ja gar nicht immer stattfinden.
Gruß Dirk
Wie sollte das Programm deiner Meinung nach aussehen ?
mfg
Speed
Hallo Speed,
probier 'mal diese Version.
Keine Garantie, weil nicht getestet und nur 'mal so schnell runtergeschrieben.
Gruß Dirk
Das Programm von dir Funktioniert!
Aber ich brauche ein Programm, dass
-alle 15 Minuten den AD[7] Port abfragt und den wert auf dem EEPROM Speichert.
-das wenn man den Taster drückt die gesamten gespeicherten messwerte übers Hyperterminal ausgelesen werden.
 - Und auf dem LCD soll zu sehen sein wie viele messwerte schon gespeichert sind.
mfg
Speed
Hallo Speed,
Aber ich brauche ein Programm, dass 
-alle 15 Minuten den AD[7] Port abfragt und den wert auf dem EEPROM Speichert. 
-das wenn man den Taster drückt die gesamten gespeicherten messwerte übers Hyperterminal ausgelesen werden. 
- Und auf dem LCD soll zu sehen sein wie viele messwerte schon gespeichert sind.
Na dann, leg los! Eine funktionierende Startversion hast du ja. Programmieren lernt man durch programmieren. Stell deine Version dann später noch 'mal rein!
Gruß Dirk
Ja ich weiß nur nicht wie ich den "LCD Zähler" programmieren muss.
Da brauche ich hilfe.
Gruß
Speed
Hallo Speed,
Ja ich weiß nur nicht wie ich den "LCD Zähler" programmieren muss. 
Ich kenne da nur die alte C-Control I und deren Application Board.
Ich weiss nicht genau, welche Du hast.
Bei meiner alten CC1 ginge das so:
#AUSGABE
gosub LCD_CLS
lcd_param = &H4E : gosub LCD_WRITECHAR    'N
lcd_param = &H52 : gosub LCD_WRITECHAR    'R
lcd_param = &H20 : gosub LCD_WRITECHAR    '
value=COUNT:gosub convert
return
COUNT ist Dein Zähler, value eine Word-Variable, die durch die Routine convert auf dem LCD ausgegeben wird. convert und die anderen Unterprogramme zur LCD-Ansteuerung werden ja auf der CD in Beispielprogrammen mitgeliefert, Du müsstest sie also haben.
Gruß Dirk
Ich habe das C-Control I mit Application Board,
aber bei mir war kein Datenträger dabei.
Gruß
Speed
Hallo Speed,
hier die Routinen für die LCD-Ansteuerung. Auch "convert" ist dabei (Ausgabe bis 999):
' Keyboard- und LCD-Interface
define lcd_buf  byte[12]
define lcd_param byte[13]
' Binär - Dezimal Umwandlung
define hunderter byte[14]
define zehner   byte[15]
define einer    byte[16]
define value    byte[17]
' LCD-Port
define lcd_port byteport[2]
define lcd_rw   port[13]
define lcd_rs   port[14]
define lcd_e    port[15]
'************************************************* *******************
' Initialisierung LCD-Display
gosub LCD_INIT
' Hier Hauptprogramm!!
'************************************************* *******************
' LCD-Interface:
#LCD_INIT
' alle ports 0
  lcd_port = off
' 8-Bit-Modus aktivieren
  lcd_param=&H38 : gosub LCD_WRITECMD
' mit 8-Bit-Command in 4-Bit-Modus umschalten
  lcd_port=&B00000010
  tog lcd_e
  tog lcd_e
' ab jetzt 4-Bit-Modus
  lcd_param = &H28 : gosub LCD_WRITECMD
  lcd_param = &H0C : gosub LCD_WRITECMD
' Display loeschen
#LCD_CLS
  lcd_param = &H02 : gosub LCD_WRITECMD
  lcd_param = &H01 : gosub LCD_WRITECMD
return
' Zeilenwechsel
#LCD_GOTOLINE
  if lcd_param = 1 then lcd_param = &H80
  if lcd_param = 2 then lcd_param = &HC0
  goto LCD_WRITECMD
' LCD-Kommando
#LCD_WRITECMD
  lcd_buf = off
  goto LCD_WRITE
' Zeichenausgabe
#LCD_WRITECHAR
  lcd_buf = &B00100000
' Kommando oder Zeichen an Display senden
#LCD_WRITE
  lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
  tog lcd_e
  tog lcd_e
  lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
  tog lcd_e
  tog lcd_e
return
'************************************************* *******************
' Binär - Dezimal Umwandlung:
#convert
 hunderter=value/100
 if hunderter>0 then lcd_param=hunderter+&H30 else lcd_param=&H20
 gosub LCD_WRITECHAR
 'zehner abfragen
 zehner=(value-(hunderter*100))/10
 lcd_param=zehner+&H30
 gosub LCD_WRITECHAR
 'einer abfragen
 einer=value-(hunderter*100)-(zehner*10)
 lcd_param=einer+&H30
 gosub LCD_WRITECHAR
 return
'************************************************* *******************
Gruß Dirk
Ich hab das Programm auf das C-Control geladen, aber auf dem LCD ist nur  „00“ zu sehen.
Mach ich was falsch?
Gruß
Speed
 
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.