PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Port abfragen alle 0,05 Sekunden wie ???



Enterprise
12.12.2005, 18:40
Hallo Forum,

Ich möchte den Portd.5 alle 0,05 Sekunden abragen.
Wenn der Port auf 1 ist dann soll über den Uart eine 1 gesendet werden und wenn der Port auf 0 ist dann soll eine 0 gesendet werden.
Ich habe dafür keinen Ansatz wie ich anfangen soll.
Ob ich einen Interupt brauche oder welchen Timer ??

Hat jemand für mich einen Ansatz.

mfg

Enterprise

Ringo
12.12.2005, 18:52
0,05sec? sind 50ms

mach doch einfach eine Do..Loop schleife..

Do
Print Pind.5
waitms 50
loop

müsste gehn
MfG
Ringo

Ratber
12.12.2005, 19:08
Ja,oder den Timer bemühen

Enterprise
12.12.2005, 21:57
Danke für die kleine Hilfe,

Habe dann mal los programmiert.
Dieses Programm kam dann raus.



$regfile = "m8def.dat" 'ATmega8-Deklarationen
$crystal = 3686000 'Quarz: 3,6864 MHz
$baud = 9600 'Baudrate der UART: 9600 Baud

On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64 'Timertakt = Crystal / 64
Enable Timer1 'Timer1 einschalten
Enable Interrupts 'Interrupts Global einschalten
Const Timervorgabe = 36736


Ddrd = &B10011111 'Pin PD6 Ausgang, Rest Eingang
Portd = &B01100000 'PullUp von Pin PD 0,1,2,3,4 aktivieren

Dim Zler As Byte
Dim P5 As Byte
Dim I As Byte
Declare Sub Port5
Declare Sub Summer

I = 1

'----------------------------------------------------------
'###Hauptschleife###
'----------------------------------------------------------

Main:

'----------------------------------------------------------
Do
Debounce Pind.6 , 0 , Port5 'Entprellt
Loop
'----------------------------------------------------------


'----------------------------------------------------------
' ###### Port 5 ###########
'----------------------------------------------------------

Port5:

Zler = 1

For I = 1 To 10 ' Durchgang 10 mal
' Sollte dann Timer auf 10
Print Pind.5 ; " " ; Zler

P5 = Pind.5
If P5 = 0 Then
Portd.7 = 0 ' Summer an Port7 aus
Else
Portd.7 = 1
End If ' Summer an Port7 ein

Waitms 100

Next I

Goto Ende


'-----------------------------------------------------------
'####### Summer ##############
'-----------------------------------------------------------

Summer:
If P5 = 0 Then
Portd.7 = 0
Else
Portd.7 = 1
End If
Return
'------------------------------------------------------------

'------------------------------------------------------------
'#### Ende #####
'------------------------------------------------------------

Ende:

Print " "
Print " "
Print " Ende "
Print "<--->";
Print " "
Print " "

Goto Main

Return


'-----------------------------------------------------------------------
'####### Timer ############
'----------------------------------------------------------------------
'###OnTimer1###

Ontimer1:
Timer1 = Timervorgabe
Incr Zler

Return

End


Es funktioniert noch nicht so wie ich es will.
Mit der Funktion Print Pind.5 erscheint immer eine 1 ich hätte gerne eine 0.
Die For Next Schleife ist nur drin dass ich es besser kontrolieren kann.
Der Timer ist auch nicht richtig eingestellt.
Sollte jede Sekunde überlaufen.
Nach dem drücken des Pind.6 soll das Programm 10 Sekunden laufen.
Also den Pind.5 alle 50 ms abfragen.
Hat jemand noch eine Idee wie ich das Programm verändern könnte ?

mfg

Enterprise

Marco78
12.12.2005, 22:14
Mit der Funktion Print Pind.5 erscheint immer eine 1 ich hätte gerne eine 0.
Das liegt daran, das der Taster gegen Masse schaltet und der interne Pullup immer eine 1 erzeugt.
Das könntest du mit IF THEN ändern. IF blablabla = 1 Then Print "0"


Nach dem drücken des Pind.6 soll das Programm 10 Sekunden laufen.
Also den Pind.5 alle 50 ms abfragen.
Das könntest du auch mit IF und den INT einschalten lösen.
IF d.6 = 0 then Enable Timer1
Der Timer kann ja auch eine Sekunde eingestellt werden und 10 mal eine Variable erhöhen.
Aber das abfragen alle 50ms solltest du nochmal überdenken.
So schnell kann kein Mensch drücken ;)
Und das ist ja auch schon fast die Zeit, die zum entprellen benötigt wird.
Was genau soll in dieser Zeit passieren? Willst du den Taster lange drücken und so lange er gedrückt ist soll alle 50mS was passieren?
Dann müsste die Abfrage ja 50mS dauern. Bzw. in 50mS muss der Taster mehrmals abgefragt werden.
Und was soll nach dieser Zeit passieren? Nochmal abfrgaen? Wieviel Zeit darf bis zur nächsten Abfrage vergangen sein?

Mag ja sein, das ich dein Problem nicht richtig verstanden habe, aber es kann auch sein, das du das was falsch siehst?!?

Es wäre hilfreich zu wissen, was genau passieren soll.
Das mit den 10 Sek ist nicht das Problem. Aber die Abfrage.

Enterprise
12.12.2005, 22:53
Also an Port 5 soll kein Taster sondern ein LDR.
Der wird von einem Laser getroffen.
Deshalb soll alle 0,05 Skunden abgetastet werden.
Ist der Port auf 1 oder 0 .
Die Abtastrate soll dann 10 Skunden dauern.

mfg

Enterprise

Enterprise
12.12.2005, 23:12
Habe das Programm etwas geändert.



$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600 'Baudrate der UART: 9600 Baud

Config Timer1 = Timer , Prescale = 64
On Timer1 Timer_irq
Const Timervorgabe = 7936


Ddrd = &B10011111
Ddrc = &B11111111
Portd = &B01100000


Config Pinc.2 = Output
Led3 Alias Portc.2


Dim Sekunden As Byte
Dim P5 As Byte
Declare Sub Port5
Declare Sub Ledon
Declare Sub Main
Declare Sub Ende

Enable Timer1
Enable Interrupts

Main:

'----------------------------------------------------------
Do
Debounce Pind.6 , 0 , Ledon: 'Entprellt
Loop
'----------------------------------------------------------
Ledon:
Print "S"
Do
If Sekunden < 10 Then
Set Led3
' Print " " ; Sekunden
Else
Reset Led3
Sekunden = 0
Goto Ende
End If

Print Pind.5 ; " "
P5 = Pind.5
If P5 = 0 Then
Portd.7 = 0 ' Summer an Port7 aus
Else
Portd.7 = 1
End If ' Summer an Port7 ein

Waitms 50


Loop

'------------------------------------------------------------
'####### Ende ###############
'------------------------------------------------------------

Ende:
Print "E"
Print " "
Print " "
Goto Main


Timer_irq:
Timer1 = Timervorgabe
Incr Sekunden
Return


Wo müßte ich das
IF blablabla = 1 Then Print "0"
eingefügt werden ?

mfg

Enterprise

Enterprise
12.12.2005, 23:20
Ich glaube ich habe es gefunden.



Ledon:
Print "S"
Do
If Sekunden < 10 Then
Set Led3 'Led zeigt 10 Sek.an
' Print " " ; Sekunden
Else
Reset Led3
Sekunden = 0
Goto Ende
End If

'Print Pind.5 ; " "
P5 = Pind.5
If P5 = 1 Then
Print "0"
Portd.7 = 0 ' Summer an Port7 aus
Else
Print "1"
Portd.7 = 1
End If ' Summer an Port7 ein

Waitms 50


Loop


mfg

Enterprise

Marco78
13.12.2005, 18:03
Laser --> LDR = 0,05 Sekunden???
Mhh, ich kaufe immer die günstigen LDR's. Die schalten nicht so schnell denke ich.

Wie auch immer...

Das If hast du da an der richtigen Stelle eingefügt.

Hast du das ganze schonmal aufgebaut und getestet? Ich kann nur schwer nachvollziehen, das es geht und was es letztendlich bringen soll.

Ratber
13.12.2005, 18:36
Also irgendwie höhrt sich das nach Rundenzähler oder Geschwindigkeitsmessung an.

Da wären LDR's allerdings denkbar ungeeignet.

Wenn die Trägheit LDR's dagegen als Entstörung genutzt werden soll dann ist das ne praktische Lösung.
Allerdings passen dann die 0.05s nicht mehr denn LDR's sind in der Regel um einiges Träger.

@Enterprise

Täte mich mit diesem Hintergrunde auch interessieren was es denn mal werden soll.

Enterprise
13.12.2005, 19:13
Nein es soll keinen Rundenzähler geben.
Ich möchte einen Laser mit der Hand auf ein kleines Loch das ca. 3 mm im Durchmesser hat, in einer Entfernung von 2,5 Meter halten.
Ich möchte wissen wie ruhig man halten kann.
Das Halten geht nur 10 Sekunden lang.
Hast du eine andere Möglichkeit wie ein LDR ???
Mit dem LDR kann ich nun mein Portd.5 nicht mehr ansprechen !
Was für Alternativen habe ich noch.


mfg

Enterprise

Marco78
13.12.2005, 19:16
Was ich vorhin noch schreiben wollte. Debounce brauchst du beim LDR nicht. Schon alleine weil deine zu messende Zeit so klein ist.
Und ein LDR so zu beschalten das er für den AVR offentsichtlich 0 oder 1 erzeugt ist auch schwer.

Ich denke eine Empfangsdiode wäre dafür besser.
Und wie stellst du sicher, das Sender und Empfänger synchron arbeiten?
Eine kleine zeitliche verschiebung reicht ja schon und im schlimmsten Fall macht der AVR immer dann die Pause, wenn die Laserdiode sendet.

Wenn du sagst, was du damit erreichen willst, kann man evtl bessere Vorschläge machen.
Allgemein wird ein Port schon von alleine alle 0,05 Sekunden abgefragt. Sogar alle 0,01 Sekunden und kürzer.

Marco78
13.12.2005, 19:20
Da haben sich unsere Beiträge überschnitten.
Wie schon gesagt, eine Empfangsdiode mit der Frequenz des Lasers.
Und da würde ich nur einen Timer nehmen, der beim ersten Kontakt mit dem Laser anfängt zu zählen und das 10 Sekunden lang. z.B. einen Timer mit einer Sekunden und wie gestern schon gesagt da bis 10 zählen.

Und die Diode einfach an INT0 oder INT1 anschliessen und in den 10 Sekunden zählen, wie oft der INT ausgelöst hat.
Auslösen kann er, wenn der Laser wie da ist, oder wenn er weggegangen ist.

Oder woher kommt die Zeit 0,05 Sekunden? Gehört die mit zur Aufgabe?
Es könnten auch die Zeiten gemessen werden, bis der Laser wieder ins Loch trifft.

EDIT: Ein INT ist auch deshalb eine bessere Lösung, weil alles was in den 0,05 Sekunden passiert auch aufgenommen wird.
Vereinfacht könnte man das ganze sogar ohne INT machen.
Einfach:

If Eingang_wo_die_Diode_angeschlossen_ist = 0 Then Incr Zähler

Ratber
13.12.2005, 20:12
Nein es soll keinen Rundenzähler geben.
Ich möchte einen Laser mit der Hand auf ein kleines Loch das ca. 3 mm im Durchmesser hat, in einer Entfernung von 2,5 Meter halten.
Ich möchte wissen wie ruhig man halten kann.
Das Halten geht nur 10 Sekunden lang.
Hast du eine andere Möglichkeit wie ein LDR ???
Mit dem LDR kann ich nun mein Portd.5 nicht mehr ansprechen !
Was für Alternativen habe ich noch.


mfg

Enterprise


Hm,das könnte man auch einfacher machen.

Sobald der Laser den Sensor trifft läuft die Zeit und wenn er abschweift wird gestoppt.
Dazwischen läuft die Uhr (Timerklicks).


Oder hattest du genau das vor ?

Enterprise
13.12.2005, 21:23
Die Funktion ist die, dass innerhalb den 10 Sekunden alle 0,05 Sekunden abgefragt wird hat der Laser getroffen oder nicht.
Laut dem Programm von gestern wird ja eine 1 oder 0 über die RS232 gesendet.
Da nimmt ein Programm auf einem PC die Werte auf.
Und speichert sie in einer SQL Datenbank ab.
Die 0,05 resultieren daraus , dass ich mehr Daten habe.
Vielleicht sollte ich es auf 0,025 reduzieren.
Dann habe ich noch ein genaueres Messergebnis.

Was füer eine Empfangs Diode soll ich da nehmen.
Hast du da eine Bezeichnung davon.

mfg

Enterprise

Ratber
13.12.2005, 21:50
Da kannst du eigentlich alles nehmen was greifbar ist.
Das schließt übrigens Fototransitoren gleich mit ein.

Enterprise
13.12.2005, 22:10
Würde der Fototransistor BPX81 oder SFH , BPW , BPX Diode .
Habe gerade eine SFH5110 gefunden kann die funktionieren ?

mfg

Enterprise

Enterprise
13.12.2005, 22:27
Nun habe ich die SFH 5110-36 mal GND und 5V angelegt.
Und am dritten Bein mit einem Multimeter gemessen.
Mit dem Laser getestet und nichts tut sich am Ausgang.
Mache ich vielleicht eine Falsche Anschaltung ?

mfg

Enterprise

Ratber
13.12.2005, 22:31
Der SFH5110 ist für Fernbedienungen gedacht und enthält neben Verstärker und IR-Filter auch einen Demodulator.

Da müßtest du deinen Laser schon stark anpassen das der damit funktioniert.
zb. Modulieren.


Der BPX81 ist da schon viel besser.
Ist zwischen 440-1070nm empfindlich (Ich nehme mal an du nutzt nen Handelsüblichen Roten Halbleiterlaser mit 670-635nm also "irgendwas Rotes") und reagiert wie alle Fototransen recht fix.


Da wir gwerade beim Thema Laser sind.
Die meisten Taschenmodell haben zwar nur 0.x bis 1mW aber für ne Fototranse mit Linse ist das schon fast Tödlich.
Nen kleiner Filter wäre nicht übel wenn er länger leben soll.

Enterprise
13.12.2005, 23:04
Jo habe es gerade bemerkt.
Dass der SFH5110 auf meinen Laser nicht reagiert.
Habe es dann mit einer Fernbedienung geprüft, hat funktioniert.
Du meinst ich kann ein BPX81 nutzen.
Muß mir morgen erst kaufen.
Ja ich habe einen handelsüblichen roten Laser.
Soll der Filter vor die Diode ?

mfg

Enterprise

Ratber
13.12.2005, 23:17
Ja wie gesagt.der SFH ist spezielle für IR-Fernbedienungen.
Die nutzen einen Träger von ca. 30-40 Khz (Je nach Modell.Auch Omni) fürs Signal ,da kommste mit dem Laser nicht weit.



Der BPX81 sollte funbktionieren.

Was den Filter betrifft so ist ein Laserstahl eben recht gut gebündelt und stellt eine nennenswerte Energie dar.

Je nach verwendetem Modell "könnte" (Muß nicht unbedingt) sich der Photoempfänger irgendwann verabschieden.
Ein Filter wäre nicht übel aber es geht auch erstmal ohne.

Enterprise
13.12.2005, 23:33
Danke Ratber,

Werde mich morgen oder Übermorgen melden wenn ich den BPX habe.

mfg

Enterprise

Marco78
14.12.2005, 19:21
Die 0,05 resultieren daraus , dass ich mehr Daten habe.
Vielleicht sollte ich es auf 0,025 reduzieren.
Dann habe ich noch ein genaueres Messergebnis.

Am genausten ist es immer noch, wenn du alles erfassen würdest.

Enterprise
14.12.2005, 22:48
Hallo ,

Habe heute Abend mir einen PBX81 gekauft bei Conrad.
Dann konnte ich erst ab 22.00 Uhr mich dran machen.
Mußte noch ein Datenblatt holen um zu wissen wie er angeschaltet wird.
Nun Funktioniert es wie ich es mir gedacht habe.
Sogar ohne INT0.
Danke Ratber für die Unterstützung.

Nun möchte ich es noch etwas verfeinern.
Also innerhalb von den 10 Sekunden bekomme ich ja lauter 0 er oder 1 en.
Jetzt möchte ich die 1er und die 0er zusammen zählen.
Das geht ja noch und auf der RS232 ausgeben.

Jetzt möchte ich noch ausgeben von wo bis wann war der größte Block von 1 en oder Blöcke von ca.3 Sekunden Länge.

Z.B: von Sekunde 3-6 Dauer 3Sekunden und von Sek.5,5 - 9,5 Dauer 4 Sekunden.

Hat da jemand eine Idee.

mfg

Enterprise

Ratber
14.12.2005, 23:26
Ja wie gesagt würde ich genau das Voirhandensein des Signals (Laser liegt auf Empfänger) als Trigger für eine Aktion nehmen.
Dann brauchste nurnoch den Timer im Hintergrund zählen zu lassen und schickst die 1 bzw. 0 mit Zeittelegramm über die Schnittstelle.
Da sich ja dabei 0 und 1 abwechseln und am Anfang ein Wechsel von 0 auf 1 steht (bzw. umgekehrt je nach Bauweise) brauchste nurnoch die Zeiten zu schicken.
Auswerten kann dann der PC.
Der hat mehr Platz und Zeit dafür.
Du legst fest wie groß die Lücken maximal sein dürfen um Start und Ende zu bestimmen.
Den Rest rechneste dann in üblicher Manier entsprechend um.
Bruttozeit von anfang bis Ende.
Für Netto das gleich ohne die zulässigen Pausen
Vieleicht noch ne Grafik die Visualisert ab wann das Zittern (Zulässige Pausen) wieder zunimmt bis der Abbruchwert (Pause zu lang) erreicht ist.
usw.
Kannst deiner Phantasie freien Lauf lassen.
Frag mal irgendwi nen Statistiker,die haben oft noch ganz schräge Ideen was man mit den Daten alle machen kann. :D



Hab ich doch richtig verstanden das du die Daten eh an den PC schickst ?

Es ginge natürlich auch komplett auffem Controller.(LCD ?)

Enterprise
14.12.2005, 23:38
Ja genau das Kann dann der PC übernehmen.
Wegen der SQL Datenbank.

Ich hatte eine Idee wenn der PC halt nicht da wäre.
Dann könne man es doch auf einem LCD Display anzeigen lassen.
Mann müsse es nicht einmal speichern.
Den PC als Adon gesehen.

Wäre das mit dem Atmega8 noch zu lösen ?

mfg

Enterprise

Ratber
14.12.2005, 23:43
Kommt auf die Datenmenge an.
Wenn es nicht zuviel ist dann geht der M8
Wenn nicht dann kann ich mir mehrere Lösungen vorstellen.

M8+Externes EEProm bzw. Flash oder nen Controller mit mehr Speicher aber das wäre irgendwie von hinten durch die Brust wenn man nen M16 nur wegen der paar Byte mehr EEprom nehmen würde.
Platzproblem sind ja kein Thema oder ?

Enterprise
14.12.2005, 23:56
Nein habe kein Platz Problem.
Muß mir noch dann einen M16 holen.
Habe keine mehr zu Hause.

mfg

Enterprise

Ratber
15.12.2005, 00:16
Mit Platz meinte ich die Größe der Schaltung.


Ein Externer Speicher am Controller wäre da irgendwie besser.
Nen 8K SPI-EEprom 20Mhz. gibts für 70 Cent an fast jeder Ecke und sogar nen 128K Flash ist für 1.60 zu bekommen.
Ja und wenn de ganz brutal bist dann gibts gleich 1MB Flash (Ebenfalls SPI 20 Mhz) für ca. 3.00

Der M8 hat nur 512 Byte ebenso wie der M16.
Erst der M32 erhöht auf 1K und kostet gleich 2.00 mehr.
Jetzt rechne mal.
512 Bytes EEProm für ca. 2.00
8192 Bytes EEProm für 0.70
128K Flash für 1.60

Also ich müßte da nicht lange überlegen. :D

Naja,egal.Deine Entscheidung.

Weißte denn mit wieviel Daten zu rechnen ist ?

Enterprise
15.12.2005, 00:44
Ja habe genügend Platz in meinem Gehäuse.


Weißte denn mit wieviel Daten zu rechnen ist ?

Also pro Durchgang kommen ja 80 Zeichen 0 oder 1. Plus A und E
Dann soll ausgerechnet werden wo die Blöcke sind und abgespeichert werden.
Dazu noch einen Quotienten von den 1er.
Ich meine die 80 Zeichen müßen nicht abgespeichert werden.
Das ganze Spiel wird 10 mal durchlaufen.
Dann ist ein anderer dran, der wieder 10 mal probiert.

Ich weiß wirklich nicht wieviele Daten da anfallen können.
Ich weiß auch nicht wieviel Platz was braucht im EEProm.
Dann ist es doch besser auf den 1MB zu gehen.

Welchen Bezeichnung hat der 1MB Flash ?

mfg

Enterprise

P.S: Bis morgen

Ratber
15.12.2005, 01:36
Las erstmal etwas mit den Zahlen spielen die wir bis jetzt haben.


Abtastungen alle 0.025s also 40 pro Sekunde.

Ein Durchgang dauert komplett 10-15 Sekunden.
Ich nehme mal 15 an.
Das sind dann 15x40=600 Abtastungen.
Dh. wir brauchen für den Zeitstempel 10 Bit.
Bei 80 zu erwartenden ereignissen brauchen wir also 10x80=800 Bit für einen Durchgang.
Da aber insgesammt 4096 Bit zur Verfügung stehen reicht das gut gepackt für 5 Duchgänge.
Bei einer etwas lachseren aber einfacheren Art der Speicherung mit 2 Bytes Pro Datensatz immerhin noch für 2 Volle Durchgänge sogar mit Reserve.

Also so würde der EEPromspeicher im M8 völlig ausreichen solange du nur max 2 bzw. 4 Datensätze vollständig speichern willst bzw. wenn nach dem Duchgang die Daten überschrieben werden können.

Da das Ergebnis eh zwecks Statistik in den PC geschickt wird ist das also kein Akt.
Der M8 reicht satt aus.



Welchen Bezeichnung hat der 1MB Flash ?


AT45DB081B-TC




Yo,bin auch wech http://vidahost.com/smilies/contrib/edoom/sleeping.gif

Enterprise
17.12.2005, 15:06
Hallo Ratber,


Also so würde der EEPromspeicher im M8 völlig ausreichen solange du nur max 2 bzw. 4 Datensätze vollständig speichern willst bzw. wenn nach dem Duchgang die Daten überschrieben werden können.

Das heißt es sind zu wenige male die man speichern kann.

Deshalb werde ich die Idee zum speichern verwerfen.

Dann ist es doch besser wenn man es für jeden Durchlauf von 10 Sekunden auf einem Display anzeigen lassen kann.

Jetzt meine Frage welche Hardware benötige ich um die Ergebnisse auf einem Display anzeigen zu lassen.

Ich habe verschiedene Displays zu hause.

Weiß aber nicht ob sie etwas taugen.

mfg

Enterprise

Ratber
17.12.2005, 16:34
Hehehe,haste auch danebengeklickt ?(Code statt Quote) :D


Ok,also kein speichern.

Die Frage nach der Tauglichkeit der Displays muß ich erstmal mit einer Gegenfrage beantworten.

Welche Daten sollen denn nurn angezeigt werden.
So einige Details oder ein Beispiel (Gemalt,gekritzelt oder sonstwie) wären jetzt sehr hilfreich.

So aus dem Stehgreif wäre alles von 1x16 bis 4x40 oder Grafik geeignet.




Weiß aber nicht ob sie etwas taugen.

Das klären wir später wenn wir wissen was denn überhaupt in Frage kommt.

Enterprise
17.12.2005, 19:28
Hallo Ratber,

Ja habe mich ver klickt mit dem Code

Hier eine kleine Skizze:

[/left]C:\tmp\Handruhe Displayanzeige.JPG[left]

Sorry ich weiß nicht wie ich ein jpg einfügen kann.


mtg

Enterprise

Ratber
17.12.2005, 19:45
Ich sehe schon,vonner Heimischen HD.

Also als Anhang.

Editier mal den Beitrag oder mach nen neuen.
Unten schräg links über dem Absendebutton steht "Atachement hinzufügen"
Da anklicken.
Der Rest sollte selbsterklärend sein.
Achtung : Nur max 400k am Stück erlaubt.

Enterprise
17.12.2005, 20:21
Hallo Ratber,

Danke für die Hilfe ,habe es nicht gesehen das Attachment.

Hier eine kleine Skizze:

Linksoben soll der Durchlauf sichtbar sein von 1 bis 10.

Dann die Zahlen sollen fest stehen bleiben von 0 - bis 10 Sekunden.
Ich weiß nicht ob man das anzeigen kann ,wenn über die RS232 eine 1 gesendt wird soll im Display ein kleines schwarzer balken sichtbar sein.
Wenn eine 0 kommt soll eine andre Graustufe sichtbar sein.
Also es läuft dann ein Balken von links nach rechts.
Wenn die 10 Sekunden Fertig sind wird ein Handruhequotient errechnet.
Soll dann hinten sichtbar sein.
Der wert wird in eine Variablen bespeichert.
Dann kommt der zweite Durchgang usw.
Bis zum 10 Durchgang da soll dann alle HRQ angezeigt werden und einen
Durchschnitt von allen HRQ's.

mfg

Enterprise

Ratber
17.12.2005, 20:51
Also nochmal ob ich es verstanden habe.

Pro durchgang der 10 Teilige Balken (Je eine Sekunde pro feld) und dahinter der aktuelle Quotient.
Das ganze für jede Runde.
Wenn die 10, Runde vorbei ist kommen auf Tastendruck in die Zeile alle 10 Quotienten plus deren Durchschnitt.

Richtig ?


Wenn ja dann zerlegen wir es mal.

10 Zeichen für den Balken dahinter ein Trennzeichen und dann 3 Stellen für den Quotienten plus Prozentzeichen.
Macht 15 Zeichen.
Da man aber wissen möchte welche Runde gerade ansteht wäre es nicht schlecht noch den Zähler mit hineinzunehmen.
bei 10 Runden sind das 2 Stellen plus Trennzeichen also 3 Stellen.
Macht jetzt 18 Stellen.
Das wäre ein 1x20 LCD.

Jetzt wollen wir ja am Ende noch das Ergebnis haben.
10 Quotienten a 3 Stellen und zwischen den Quotienten ein Trennzeichen ergibt 10x3+10x1=40 Zeichen.
Dahinter noch den Mittelweet sind nochmal 3+1 Zeichen und damit 44 Zeichen.

44 ist aber keine übliche Größe für Text-LCD's .
Da ist normalerweise meist bei 40 Zeichen schluss.

Da müßten wir also auf ein größeres Display erweitern.
Da ist es Geschmackssache was du haben willst bzw. davon abhängig was du gerade da hast.
Was geht wäre 2x40 oder etwas kompakter 4x20.
Ja und bei einem Grafischen Display ist dann noch viel mehr platz aber die kosten auch ne ecke mehr.

Ja,und nu bist du wieder drann.
Was haste denn gerade da ?