PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geschwindigkeits anzeige



sick
28.06.2005, 13:50
Tach erst mal bin neu hier und nicht so viel Erfahrung.

1. Ich hab ein MEGA8 board und möchte damit eine geschwindigkeit
an einem LCD Display anzeigen lassen.

2. Messung erfolgt über 2 lichtschranken die hinter einander liegen.
3. Währe auch gut wenn die zeit angezeigt würde die vergeht bis die erste lichtschranke zum 2ten mal berührt wird.

bräuchte dringend hielfe dafür


thx4 help

PicNick
28.06.2005, 13:56
Gut. Nun sag' aber erst mal, wie denkst du dir denn, daß sowas gehen könnte ?

sick
28.06.2005, 14:07
Hab es mir so gedacht.

1. Das Stück geht durch die lichtschranke.
Durch die erste, dann wird ein timer aktiv der die zeit hochzählt bis die 2te lichtschranke aktiv ist (unterbrochen) diese zeit möchte ich dann an dem LCD Display in km/h angezeigt haben.

2. Sobald die 1 ste Lichtschranke wieder unterbrochen wird soll die zeit angezeigt werden, die vergangen sit, inder die 1 lichtschrange zum 1sten mal unterbrochen ist.
und danach wieder die geschwindigkeit.

Alter Knacker
28.06.2005, 14:14
und wo genau liegt jetzt das problem?

sick
28.06.2005, 14:16
am basic programm ich komm und komm nicht drauf wie ich das ganz genau machen soll. ;o(

hab zwah schon was geschrieben aber das klappt sowieso net brauch ne andere lösung.


'################################################# ##
'Sven 17/04/05 Rev01
'
'################################################# #############




'################################################# ##
'File and Variable declaration
'################################################# #############

Declare Sub LCD()
Declare Sub post-treatment()


$regfile = "m8def.dat" 'controller definition file


Dim dummy1, dummy2 As Byte
Dim count_geschwindigkeit As Byte
Dim count_gesamt_zeit As Integer


'################################################# ##
'Initialisation and configuration of device
'################################################# #############

$crystal = 16000000 'Quarzfrequenz


Config Adc = Single , Prescaler = Auto , Reference = Off 'Für Tastenabfrage und Spannungsmessung
Config Pinc.0 = Input 'Für Tastenabfrage
Portc.0 = 1 'Pullup Widerstand ein
Start Adc

Const Ref = 5 / 1023 'Für Batteriespannungsberechnung
'Bei einer anderen Referenzspannung muss die 2.5 durch entsprechend ersetzt werden
'Die Referenzspannung wird durch den Jumper JPREF bzw. Spindeltrimmer festgelegt

'ZU ÜBERPRÜFEN!!!!!
' Falls ein LCD Display angeschlossen ist
Dim ___lcdno As Bit
Config Lcdpin = Pin , E = Portc.3 , E2 = Portd.7 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 20 * 4

Config PinC.1 = Output 'pin C1 um LED1 zu steuern
Portc.1 = 1 'LED angesteuert

Config PinD.2 = Input 'pin C2 um phototransistor1 zum abfragen
Portc.2 = 1 'Pullup Widerstand ein

Config PinC.3 = Output 'pin C3 um LED2 zu steuern
Portc.3 = 1 'LED angesteuert

Config PinD.3 = Input 'pin C4 um phototransistor2 zum abfragen
Portc.3 = 1 'Pullup Widerstand ein

'################################################# ##
'Initialisation and configuration of variable
'################################################# #############


dummy1 = 0
dummy2 = 0




'################################################# ##
'Main Programm
'################################################# #############


Do
If ((PinD.2 = 1) & (dummy1=1))
dummy1 = 0
Endif
If ((PinD.3 = 1) & (dummy2=1))
dummy2 = 0
Endif
call post-treatment()

Call LCD()



Loop

End


'################################################# ##
'Sub Programm
'################################################# #############


Sub LCD()
..
...
End Sub

Sub post-treatment()

Speed=3600*(count_geschwindigkeit + N_count0* timer_zeit_TMR0)
Gesamt_zeit = count_gesamt_zeit + N_count1* timer_zeit_TMR1

End Sub


'################################################# ##
'Interrupt Subroutine
'################################################# #############


Sub ...()

If ((PinD.2 <> 0) & (dummy1 = 0)) 'Etwas in Lichtschrank 1

TMR0 (8 bit) init -> TMR0 config mit klein Prescaler, und benutzt für die Geschwindigkeit
N_count0=0


count_gesamt_zeit= TMR1(16 bit)Werte
TMR1 auf null einsetzen (init TMR1) -> TMR1 config mit gross prescaler
N_count_werte=N_count
N_count1=0

dummy1=1

Endif

If ((PIND.3 <>0) & (dummy2 =0)) 'Etwas in Lichtschrank 2

count_geschwindigkeit= TMR0(8 bit)Werte

dummy2=1


' If TMR1 overflow
'
' N_count1 = Ncount1+1 'kontrollieren der IF schleife (wäre es möglich zwo If in einer schleife ohne EndIF??)
'
' Endif
'ENDIF? Dies ist eine Verschachtelung

If TMR0 overflow

N_count0 = Ncount0+1

Endif

EDIT: Code-Tags eingefügt. regards, Moddy

sick
28.06.2005, 14:23
hab noch was anderes gefunden aber weiß auch net ob mir das weiter hilft.


$crystal = 40000
Config Timer1 = Timer , Prescale = 64 '4MHz/64 = 62500
Const Timer_start = 6250 'alle 100ms Überlauf
Load Timer1 , Timer_start
Enable Timer1
On Timer1 Int_1

Do
wenn Lichtschranke 1, dann Takt = 0
wenn Lichtschranke 2, dann Wert = Takt in 1/100 Sek
Loop

Int_1:
Load Timer1 , Timer_start
Incr Takt
Return

PicNick
28.06.2005, 15:03
Im Prinzip kommt das letzte Beispiel schon hin. Du stellst den Timer auf Überlauf bei 1/100 Sekunde (Rnavr-Tool zum Berechnen verwenden)
Wenn dann wieder die erste Lichtschranke kommt, hast du dann diese Zeit auch.
Bei Lichtschranke 1 schaltest du auf Zeit-Display, bei der anderen auf die umgerechnetet Speed
Auf geht's !

28.06.2005, 15:38
Habs mal so weit gemacht.
bekomm aber nix am LCD Display raus.
Wie bekomm ich die variable dazu das ich sie angezeigt bekomme.
Hab mich noch net so richtig damit auseinander gesetzt.

PicNick
28.06.2005, 15:41
Hab mich noch net so richtig damit auseinander gesetzt.

Würde sagen, das ist eine gute Gelegenheit dazu.

Schon "Hello, world" getestet ?

28.06.2005, 15:51
texte gehen.
aber gerade das ich die variable zum anzeigen bekomme, das weiß ich net.
Muss ja die variable die ich messe irgendwie zum anzeigen bekommen, weiß nur net wie

PicNick
28.06.2005, 15:54
Im Help bei "Index->LCD" schauen.

LCD "Hello Sepp"
LCD variable

28.06.2005, 16:10
lcd zeigt was an aber nur komisches zeug. an den leitungen und am kontrast liegt es net hab ich gerade kontrolliert.

Ich glaub es liegt an den sensoren hab so gabellichtschranken (natürlich mit riederständen dran) (als versuch).

Wie müsste das programm den ausschauen so wie ich es brauch?????
versuch jetzt selber noch ne weile mein glück dran.

PicNick
28.06.2005, 16:15
Für heute muß ich mich verabschieden.

Teile und Herrsche : Versuch ein Programm, daß dann (und nur dann) einfach "hello" sagt, wen eine Lichtschranke unterbrochen wird

sick
28.06.2005, 16:49
wie sag ich das lichtschranke 1 oder lichtschranke 2
auf einem (jeder auf einem anderen) port liegt???????????

PicNick
29.06.2005, 08:08
Unter der Annahme, daß das so konfiguriert ist:


Config PinD.2 = Input 'pin C2 um phototransistor1 zum abfragen
Config PinD.3 = Input 'pin C4 um phototransistor2 zum abfragen

if Pind.2 = 1 then
............................ 'Schranke 1
end if
if Pind.3 = 1 then
............................ 'Schranke 2
end if

sick
29.06.2005, 13:17
ist halt so:

es sind ja pro lichtschranke 2 sensoren. (empfänger und sender)
und das 2 x hintereinander.

wie soll ich das dann machen?????

PicNick
29.06.2005, 13:20
Der Sender ist doch kein Sensor ??? Den kannst du nur aufdrehen oder abdrehen

sick
29.06.2005, 15:38
das sind (ir sender 2 pin und ir transistore 2 pin)

den sensor muss ich ja auf einen port legen und den empfänger auch jeden mit einem pin noch auf masse.
und das immer für jede lichtschranke.

und wie muss ich das jetzt im programm schreiben????????

please help