PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pace Car Blitzer Programmieren!



NRG
23.06.2005, 12:02
Halli Hallo!!!
Ich will mein erstes Projekt mitm atmega8 in Angriff nehmen!! *gg*
Und zwar will ich ihn so programmieren, dass die leds so blitzen wie pace car blitzer!! Weiß jemand wie des funzen könnte??

MFG

NRG 8-[

uwegw
23.06.2005, 13:09
also LEDs blinken lassen? das ist doch eigentlich die allererste übung wenn man mit µCs anfängt, ähnlich wie "hallo welt" wenn man PC-software proggt...

NRG
23.06.2005, 13:30
Ne du verstehst mich falsch! du kennst doch diese Blitzer, die so schnell hintereinander blitzen!

uwegw
23.06.2005, 13:35
das ist eigentlich auch nicht viel anders... du blinkt nen paarmal schenll und machts dann ne pause... in der einfachsten variante wärs ne endlosschleife, in der dann die blinkfolge durch umschalten der ausgänge ubnd pausen dazwischen festgelegt sind...

also so:

<schleife anfang>

led an
50ms warten
led aus
70ms warten

led an
50ms warten
led aus
70ms warten

led an
50ms warten
led aus
70ms warten

led an
50ms warten
led aus

400ms warten

<schleife ende>


dann blinkt die led dreimal für 50ms auf, macht zwischendurch 70ms paues und dann nochmal 400ms, bevor sie wieder von vorne beginnt...

NRG
23.06.2005, 14:05
ahja...... gut ! DANKE!!! Echt cool von dir!!!! =D>

habs mal so gemacht:

$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output
Dim I As Byte

Do

Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 400
Loop



und so sin die vom Pace Car? Hab mir die schneller vorgestellt. hmm..... egal! Trotzdem Danke!!!
Und ne weitere Frage:
Kann ich die dann evtl. so machen, dass ich mit hilfe des potis die geschwindigkeit ändern kann??
Det wär nämlich was!!

MFG

NRG \:D/

uwegw
23.06.2005, 14:25
die zeiten waren jetzt nur geraten und als beispiel gedacht... du musst sie halt so anpassen dass es dir gefällt bzw echt aussieht...

du könntest potis an eine analogeingag naschließen und dann je nach gemessenem spannungswert=> potidrehwinkel die zeiten ändern...

NRG
23.06.2005, 14:31
Ähm und wia mach ich des am besten?? ich bin da Anfänger! :-b

michaelb
23.06.2005, 14:38
Du willst wissen wie man ein Poti!
Das ist ganz einfach das mittlere Bein des Potis an den Analogeingang, das eine andere an 5V das andere an GND. Ich glaub so was nennt mann Spannungsteiler!
Gruß Michi

NRG
23.06.2005, 14:43
nein ich will doch nich wissen, wie ich des anschließ! Trotzdem danke!!
Ich würde gerne den Code erfahren........... wie ich des poti auslese........ *gg*
Hoffe es weiß jemand! *gg*

Also dass ich halt an dem poti dreh, und die blinkgeschwindigkeit ändert.

MFG

NRG ](*,)

NRG
28.06.2005, 09:45
Hmm schade! Hab gedacht jemand könnte mir bei meinem Problem helfen! Naja kann man nichts machen! :-(

MFG

Nrg

Vitis
28.06.2005, 11:48
port a kann als ad-wandler benutzt werden,

den man recht einfach auslesen kann.

geht mit 10 bit, also 1024 abstufungen möglich.

es wird der spannungswert im verhältnis einer

referenzspannung gemessen.

den rest kannste dir auch selber mal gedanken machen

NRG
29.06.2005, 12:21
So ich wollte jetzt erstma kleiner anfangen, da ich des mitm poti net hinbekomm. Ich wollts jetzt so machen, dass wenn ich den taster drücke einmal, dass dann die blitzer losgehen. Aba irgendwie funzt des net. Hier mal mein Programmcode von bascom:



$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output
Config Portd = Input


Do
A:


If Pind.2 = 0 Then
Goto B
Else
Goto C

End If


B:
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 400
C:
Loop


Des blinkt irgendwie von anfang an............

MFG

Nrg

uwegw
29.06.2005, 12:59
du solltest im else teil wieder nach A: springen, damit das programm die taste sofort wieder abfragt... so wie bei dir sollte es aber auch laufen...

wie sieht die hardware aus? wie ist die tastze angeschlossen? richtiger port? pull-uop?

NRG
29.06.2005, 13:48
ich habe das my avr board. Der Taster ist eigentlich richtig angeschlossen. Ich versuche es mal mit else goto a.
Danke!

MFG

NRG

uwegw
29.06.2005, 14:04
auf dem board ist kein externe pullup-widerstnad dfrauf... du müsstest also den internen aktivieren...

nach den ganze config befehlen
portd.2 = 1


aber im simulator läufts auch damit sofort durch...

uwegw
29.06.2005, 14:10
so gehts im simulator: die if abfrage muss in eine zeile! an dieser stelle finde ich basic echt sch****... in pascal teilt man dem compiler mit nem ; mit, dass der befehl zu ende ist, und alles ist in butter...


$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output
Config Portd = Input
portd.2 = 1

Do
A:


If Pind.2 = 0 Then Goto B Else Goto C

B:
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 400
C:
Loop

NRG
29.06.2005, 14:10
Also ich habs jetzt so gemacht und es funzt!!! juhu!!!



$regfile = "m8def.dat"
$crystal = 3686400

Config Portb = Output
Config Portd = Input

Do
A:
If Pind.2 = 0 Then
Goto B
Else
Goto A
End If

Loop
End


B:
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms 50
Portb.1 = 0
Waitms 400
Goto A




werd mich dann mal an die geschwindigkeit machen......
Nur kann mir vielleicht jemand nen denkanstoß geben, wie ich die stellung vom poti in ne zahl umwandle???

MFG

Nrg

uwegw
29.06.2005, 14:26
in der bascom hilfe, stichwörter "getadc" und "config adc"
die forensuche benutzen (das thema hatten wir schon x mal...)

und die referenzspannung keinesfalls als "internal" konfigurieren...

NRG
29.06.2005, 14:29
hmmm............... ja ok! Danke ich werds mal versuchen!!! Danke!!

O:)

Habs jetzt mal so gemacht!! Stimmt des so oder gibts noch verbesserungsvorschläge? also funzen tuts!!!



$regfile = "m8def.dat"
$crystal = 3686400
Config Portb = Output

Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Dim W As Word , Channel As Byte
Channel = 0
A:
Do
W = Getadc(channel)
Goto B
Loop
End

B:
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 70
Portb.1 = 1
Waitms W
Portb.1 = 0
Waitms 400
Goto A

Mfg

Nrg

uwegw
29.06.2005, 16:40
reference würde ich nocht auf internal lassen (einfach weglassen)... auf deinem board ist nämlich der anschluss für die ferenzespannung schon mit 5V verbunden...

das do... loop kannst du dir sparwen weil das loop sowieso nie erreicht werden kann... und entscheid dich dann mal ob du assemblermäßig mit sprungmarlen oder hochsprachenmäßig mit if then else oder do loop programmieren willst... in hochsprachen sind sprungmarken verpönt, aber in basic gehst wohl teilweise nicht anders...

NRG
29.06.2005, 19:16
SO hab jetzt das programm so gemacht, dass auf das lcd display die stellung des potis ausgegeben wird!!! =P~



$regfile = "m8def.dat"
$crystal = 3686400

Config Portb = Output

Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte
Dim S As Word
Dim D As Word

Channel = 0
A:

W = Getadc(channel)
S = W / 125
D = S * 10
Goto B


B:
Portb.4 = 1
Portb.5 = 1
Portb.3 = 1
Waitms D
Portb.4 = 0
Portb.5 = 0
Portb.3 = 0
Waitms 70
Portb.4 = 1
Portb.5 = 1
Portb.3 = 1
Waitms D
Portb.4 = 0
Portb.5 = 0
Portb.3 = 0
Waitms 70
Portb.4 = 1
Portb.5 = 1
Portb.3 = 1
Waitms D
Portb.4 = 0
Portb.5 = 0
Portb.3 = 0
Waitms 70
Waitms 400

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


Waitms 1000
Cls
Lcd D

Goto A



hoffe es kann evtl. jemand brauchen!!!

Mfg

NRG

PS: nur eine frage hab ich noch, wie kann es sein, dass die leds bei geringem poti also für w=0 so ausschauen, wie wenn sie gedimmt sind???