PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD von Pollin und RN-Control geht net



Raphael5000
05.01.2007, 20:04
Hallo,
haben uns dieses Display bei Pollin gekauft: http://www.pollin.de/shop/detail.php?pg=NQ==&a=NjE2OTc4OTk=
und nach dieser Anleitung:
https://www.roboternetz.de/wissen/index.php/LCD-Modul_am_AVR#BASCOM-AVR_Programm_3
Zusammengebaut (im 4-Bit-Modus)
Kontrast ist eingestellt (2,4k)

Haben diverse Programme ausprobiert, aber ohne Erfolg :-(
Kann uns jemand weiterhelfen?
zum bsp.


$lib "lcd4busy.lib" 'ersetzt die Standard LCD Bibliothek
$regfile = "m32def.dat"
$crystal = 16000000

Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display
Const _lcdport = Portc
Const _lcdddr = Ddrc
Const _lcdin = Pinc
Const _lcd_e = 1
Const _lcd_rw = 2
Const _lcd_rs = 3


Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hello Horschd." 'String auf Display anzeigen


Vielen Dank
Gruß
Horschd

Jon
05.01.2007, 20:08
Du musst auf jeden Fall diese Zeile:
Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display
durch
Config Lcd = 16 * 2 'wir verwenden ein 2 x 16 Zeichen Display
ersetzten.

Und mit diesen Zeilen
Const _lcdport = Portc
Const _lcdddr = Ddrc
Const _lcdin = Pinc
Const _lcd_e = 1
Const _lcd_rw = 2
Const _lcd_rs = 3
kann ich nichts anfangen...

Aber du hast das Programm zu Ende geführt und nicht so gelassen?

jon

Raphael5000
05.01.2007, 20:13
Die Zeile
"Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display" haben wir schon geändert, aber wir dachten eigentlich schon, dass das das Vollständige Programm wäre?!?!?!?!?!?!?

Jon
05.01.2007, 20:19
Das Programm müsste vollständig so aussehen:


$lib "lcd4busy.lib" 'ersetzt die Standard LCD Bibliothek
$regfile = "m32def.dat"
$crystal = 16000000

Config Lcd = 16 * 2 'wir verwenden ein 4 x 20 Zeichen Display
Const _lcdport = Portc
Const _lcdddr = Ddrc
Const _lcdin = Pinc
Const _lcd_e = 1
Const _lcd_rw = 2
Const _lcd_rs = 3


Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hello Horschd." 'String auf Display anzeigen
end


Wenn das nicht geht probiere es mal hiermit:


$regfile = "m32def.dat"
$crystal = 16000000

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

Cls
Locate 1 , 1
Lcd "Hallo Welt"

end

Eventuell musst du noch die Pins ändern, wenn du andere verwendest.

jon

Raphael5000
05.01.2007, 20:26
Hi,
danke für die Antwort, aber da kommt einfach nix.
Die eine Zeile ist schwarz und die andere leer.
Evtl. defekt?

linux_80
05.01.2007, 21:06
Warum sollte es gleich defekt sein, so schauts halt aus wenn man es einschaltet, und sonst nix damit macht.

Erzählt mal wie ihr es verkabelt habt, also welches Kabel vom LCD geht wo am RN-Control hin ?
Dann können wir weiterschaun.

Raphael5000
09.01.2007, 17:08
Also, hier jetzt die Pin-Belegung. Das Display hat nach Anleitung die gleiche Pin-Belegung wie in der Beschreibung hier auf rn-wissen, also nenn ich nur die Zahlen:
Display / PORT C
1 / 9
2 / 10
3 / -
4 / 3
5 / 4
6 / 1
7 / -
8 /-
9 / -
10/ -
11 / 6
12 / 5
13 / 8
14 / 7

Vielen Dank für eure Hilfe.
Gruß
Horschd

Raphael5000
09.01.2007, 17:55
Wir haben jetzt mal Pin 13,14 und Pin 11,12 getauscht.
Ohne Erfolg :-(
Ist es eigentlich normal, dass ein paar LED leuchten, wenn wir das Programm (siehe oben) draufgespielt haben /LED 1,2,4)
Bitte helft uns.
Gruß Horschd

linux_80
09.01.2007, 20:12
Hallo,
ihr habt das RN-Control ? Da sind die LEDs an PortC, deshalb werden da ein paar LEDs leuchten oder zumindest kurz aufblitzen wenn die Daten zum LCD übertragen werden.

Habt ihr an Pin3 garnix angeschlossen ?
Dort gehört auch Spannung ran, aber über ein Poti zum einstellen des Kontrastes, wenn garnix dran ist, geht es normalerweise auch garnicht, der Pin3 heisst ja auch "Power supply for LCD driver".
als ein Poti ca. 10k mittleres Pin an diesen Pin3 die andern jeweils eins an Pin1 und an Pin2. Dann solange hin- und herdrehen bis man was sieht.

Welches Pin dann wo hinkommt ist soweit egal, nur muss es im Programm dann auch so angegeben werden bei Config LCDpin ... !
Und die Pins planlos durchtauschen hilft auch nichts.
Schaut euch mal an wie Jon oben das in seinem 2. Beispiel schon gezeigt hat.

Raphael5000
10.01.2007, 17:25
Hi,
vielen Dank für deine Antwort.
Wir haben Pin 3 vom LCD über 8K an Masse. Dann ist die obere Zeile voll mit schwarzen Kästchen und die untere leer. Die Kästchen sind aber nicht so schwarz wie, wenn wir Pin 3 direkt an Masse anschließen.

Ja, die RN-Control. Müssen wir da den Motortreiber evtl. rausnehmen? Da 2 Pins vom Port C für den benutzt werden?

Und noch ne Frage. Das 2. Beispielprogramm ist so, wie es oben ist, fertig? Also nur noch compilieren und in den Chip rein?

Gruß
Horschd

Jon
10.01.2007, 18:54
Japs. Das zweite Programm ist soweit fertig. Eventuell musst du nur die Anschlüsse ändern aber sonst ist es funktionsfähig.
Den Widerstand für den Kontrast musst du so wählen, dass auf keiner Zeile schwarze Balken sind.

jon

nooob
11.01.2007, 15:17
ich denk mal du musst dir die PDF vom RN-Control durchschauen und die Ports benutzen die nicht vom Motor oder irgendwelchen Sensoren belegt sind..
leider sind viele anschlüsse doppelt.. fallen also weg..

ich hab mir vorgestern auch dasselbe LCD bestellt.. und besitze das RN Control, ich versuch mal mein Glück wenn ich es habe und dann kann ich euch ja evtl auch weiterhelfen..

ciao

nooob
14.01.2007, 20:43
hallo jungs.. ich hab dasselbe problem ;-)
hab heute keinen poti kaufen können da sonntag, also dann schnell aus elektroschrott passende widerstände rausgelötet, hab ausgerechnet dass bei 0,002 A 2500 ohm passen müssten .. so ungefähr,.. aber hab auch oben schwarz und unten leer ;-)

programm stimmt soweit.. morgen werd ich nen poti besorgen..
dann sehn wir weiter.

Raphael5000
15.01.2007, 10:23
Cool, halt uns auf jeden Fall auf dem laufenden.
gruß Horschd

nooob
15.01.2007, 18:31
statusbericht ;-)

potis stinken ganz schön..
ich dachte es langt wenn ich dem typ sage dass ich ein 10k poti brauch.. das hab ich auch angeschlossen.. also das 3.te bein an port3, die beiden anderen an masse und +...
kann es sein dass da ein höherer widerstand dran muss?? als ich richtung 10k ohm gedreht habe ist ganz zum schluss das schwarze obere feld blasser geworden.. da hats aber dann auch schon weiß ausm poti geraucht ... leider tot.. auch durchmessen hat nichts mehr gebracht..

meine LEDs aufm Board leuchten auch durcheinander..
laut RN-Control PDF bedeutet dass aber, dass die pins am port C auf high geschalten sind.. das kann man mit den Dip.Switches deaktivieren.. aber macht ja nix wenn die leuchten..

im moment weiß ich au net weiter.. ich denk ich kauf nochmal nen paar potis .. ??

Jon
15.01.2007, 18:42
Ein Poti musst du dir auch nochmal kaufen.
Und den 15kOhm Widerstand nicht vergessen. Der Aufbau ist nochmal hier (https://www.roboternetz.de/wissen/index.php/Bild:Stromversorgung.jpg).

jon

nooob
15.01.2007, 20:12
hmm schade dass ich das noch nicht früher gesehen hab ;-)

dachte ich muss bloß das poti anschliessen.. aus dem datenblatt des LCD ging das auch nich richtig hervor.. mist.
naja wenigstens is am board nix hin..

also... fortsetzung folgt morgen abend oder so

repi64
15.01.2007, 21:19
Grundsätzlich geht es auch nur mit dem Poti also ohne den Widerstand.
Wenn es qualmte dann hast du den Schleifer des Potis nicht am Pin 3 des Displays angeschlossen sondern an 5V oder GND. Durch das drehen in die eine Richtung hast du dadurch einen Kurzschluss verursacht und das Poti geplättet.

nooob
15.01.2007, 22:16
http://www.le-flow.de/poti.JPG

hm.. also ich bin so ein napp in sachen elektronik.. ich hab den mittleren (oberen) Pin an Pin3 des displays gehabt.. die beiden anderen an +5V und Gnd..

wie muss es richtig sein ?

Jon
16.01.2007, 13:54
Also der einzelne Pin (auf deinem Bid der mittlere) sollte an Pin3 des LCDs und die anderen beiden an GND und VCC.

jon

nooob
16.01.2007, 17:41
@ raphael..
läufts bei euch?
ich frag mich die ganze zeit für was diese 2 weiteren (strom)anschlüsse unter den 14 Pins ist.. da wo V0 und +5V steht..
für was wäre denn dann Pin 1 und 2?? im datenblatt dazu steht halt auch dass man an Pin1,2 die 5 V anschliessen soll.. und an Pin3 Power Supply fpr LCD Driver.... den habe ich auch über diesselben 5V versorgt.. also mit Poti und 15k widerstand davor... gemessen kommen dann so ungefähr 0,5V nach dem Poti raus wenn der auf mitte steht..

es tut sich aber leider nichts am bildschirm.. jetzt is er total blass.. kein bißchen dunkel.. :-\

man man .. da war die servoinstallation einfacher..

laut https://www.roboternetz.de/wissen/index.php/Bascom_und_LCD%27s

kann man ja auch erst den kontrast einstellen, bevor es weiter geht..
das wollte ich machen.. geht aber jetzt irgendwie nicht..

"Mit dieser Beschaltung kann man schon mal probieren, ob man durch verdrehen des Kontrast-Potie, dunkle Vierecke zu sehen bekommt. Wenn ja, ist bis hier her schon mal alles ok . Den Kontrast jetzt so einstellen, dass man gerade, diese dunklen Vierecke nicht mehr sieht."

Raphael5000
16.01.2007, 17:46
Hi,

wir mussten die Kontakte vom LCD wieder ablöteten. Jetzt sind die Ösen zu :-(.
Wir stellen das LCD jetzt erst mal zurück und versuchen uns an was einfacherem. Halt uns trotzdem auf dem Laufenden, wenn du erfolgreich warst.
Gruß
Raphi

nooob
16.01.2007, 18:00
das is doch kein problem wenn die kontakte zu sind... hälst den lötkolben dran und dann stichst mit ner nadel durch.. musst halt schnell sein ;-) aber so mach ich das immer.

Jon
16.01.2007, 18:18
ich frag mich die ganze zeit für was diese 2 weiteren (strom)anschlüsse unter den 14 Pins ist.. da wo V0 und +5V steht..
Hast du dazu mal ein Bild??


für was wäre denn dann Pin 1 und 2?? im datenblatt dazu steht halt auch dass man an Pin1,2 die 5 V anschliessen soll.. und an Pin3 Power Supply fpr LCD Driver.... den habe ich auch über diesselben 5V versorgt.. also mit Poti und 15k widerstand davor... gemessen kommen dann so ungefähr 0,5V nach dem Poti raus wenn der auf mitte steht..
Kann ich dir beandtworten, wenn ich ein Bild gesehen habe ;)


laut https://www.roboternetz.de/wissen/index.php/Bascom_und_LCD%27s
kann man ja auch erst den kontrast einstellen, bevor es weiter geht..
das wollte ich machen.. geht aber jetzt irgendwie nicht..
Den Kontrasst musst du sogar einstellen.

jon

nooob
16.01.2007, 18:57
okey danke dass du mir hilfst..

hier die bilder:

http://www.le-flow.de/lcd2.JPG
http://www.le-flow.de/lcd3.JPG
irgendwie unlogisch.. hier sieht man dass die unteren anschlüsse einmal mit pin3 und mit dem +5V per platine verbunden sind.. was das allerdings bringt?.

http://www.le-flow.de/lcd4.JPG

hab auch meinen anschluss hinskizziert..
ist direkt am PortC an +5V/Gnd angeschlossen..

Jon
16.01.2007, 19:16
Also die beiden extra Pins, an denen du das grüne und weiße Kabel hast werden für die Hintergrundbeleuchtung sen. Weshalb da aber eine Spannung anliegt kann ich nicht sagen.

Du hast im Moment den 15kOhm Widerstand in Richtung Masse.
Mache es mal so, dass der Widerstand an VCC angeschlossen wird, und dann das Poti kommt. Eventuell ist die Spannung am Pin3 zu hoch.
Im Moment ist der 15kOhm Widerstand sinnlos.

jon

nooob
16.01.2007, 19:27
okey ich werd es mal tauschen..

also hintergrundbeleuchtung hat es nicht.. trotzdem gibt es von oben gesehen rechts aussen Anoden und Kathoden anschluss..
das wäre dann fürs Backlight.. is aber wie gesagt optional..

nooob
16.01.2007, 19:31
HEHEHEE es geht.. vielen dank!! also obere zeile is jetzt dimmbar mit dem poti!!!!!!!!

ich löt mal die anderen pins wieder an, dann sehen wir weiter!!

nooob
16.01.2007, 20:33
hm, noch zeigt es nix an, ausser dass die obere zeile dimmbar ist.. .. ich hab PortC 1,2,3,4,5 und PortD2 benutzt.. die sind eigentlich nicht vergeben..

was passiert mit dieser doofen R/W leitung.. die "kann" auf GND steht im RNWissen.. müssen alle anderen auch auf GND, die ich nicht benutze??

status:
so hab alle unbenutzten auf Masse.. (die Masse von der LCD Spannungsversorgung)

nüscht passiert,.. immer noch obere Zeile dimmbar.


kann es sein dass ich die ports falsch benannt hab?

2 4 6 8 10
1 3 5 7 9

so stimmts doch, oder?

Jon
17.01.2007, 13:23
so hab alle unbenutzten auf Masse.. (die Masse von der LCD Spannungsversorgung)
Sollte so stimmen.


kann es sein dass ich die ports falsch benannt hab?
2 4 6 8 10
1 3 5 7 9
Aus dem werde ich nicht ganz schlau, aber ich habe die Ports bei einem deiner Bilder mal beschriftet. Ist nur nicht sehr schön geworden.

jon

linux_80
17.01.2007, 20:00
Was ich mich frage, warum es Probleme mit den Pins gibt, das steht doch gross auf beiden PlatinenSeiten daneben, die fehlenden kann man sich rauszählen.

nooob
17.01.2007, 21:01
mit der nummerierung hab ich eigentlich den portC aufm rncontrol gemeint...

und der pin 1 wird schon mit
portc.1 angesteuert? in der dokumentation stand was von portc.0 ??? ich bin ein wenig verwirrt...

nur damit niemand denkt ich bin der totale newbie-..... 3 IR sensoren und 2 servos sorgen schon für eine kollisionsfreie fahrt! ;-)

edit: morgen poste ich fotos/skizzen vom anschluss und meinen quelltext.. bin grad aber noch unterwegs.. danke für die unterstützung bis hier!!

linux_80
17.01.2007, 22:22
Wollte nur gefragt haben ;-)

In der Computerwelt beginnt alles bei 0, deshalb ist PortC.0 der 1. Pin am Stecker. Geht dann auch nur bis PortC.7 was der 8. Pin an Stecker ist.

Das wäre aber schön in dern Beschreibnung des RN-Control zu sehen,
zB beim Port C : Pin1 PC0 / SCL ...

Man muss dann also nur schauen wo an diesem Wannenstecker Pin 1 ist, und dieser ist mit einem Pfeil gekennzeichnet, zwar nicht recht auffällig, aber wenn mans weiss das es ein Pfeil ist, sieht man ihn auch ;-)
Auf der Seite der Aussparung ist ein kleines Dreieck, und dort ist Pin 1, hintendran Pin2 usw.

Du kannst Dir auch mal die Doku zum RN-LcdAdapter anschauen, da kann auch mit einem 10-pol. Kabel verbunden werden.

nooob
18.01.2007, 15:53
jungs es geht jetzt!!!!!!!!!!

pins falsch belegt..
ich dachte dass es bei eins anfängt.. bei meinen servos am portd.3 und portb.3 isses jedenfalls so ???????????????? komisch..
am port C musste ich einen weniger nehmen.. und einen hatte ich ausversehen vertauscht.. (gedanklich im quelltext)...

aber jetzt funzt es ... ich mach noch fotos.

danke!!!!!!!!!!!!!!!!!!

nooob
18.01.2007, 18:53
toll.. irgendwie zeigt er pro zeile net mehr an als 8 zeichen oder so.. der rest wird abgeschnitten..
und es wird irgendwie langsamer das programm...
das muss ich noch optimieren..

Jon
18.01.2007, 18:54
Wie sieht denn dein Prog jetzt aus?

jon

nooob
19.01.2007, 00:11
$regfile = "m32def.dat"



$crystal = 16000000 'Quarzfrequenz
$baud = 9600






'Timer
Config Timer2 = Timer , Prescale = 1024
On Timer2 Timer_irq
Const Timervorgabe = 100
Enable Timer2



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.4 , Db7 = Portc.2 , E = Portc.3 , Rs = Portb.4
Config Lcdbus = 4



'Servo Config
Config Servos = 2 , Servo1 = Portd.3 , Servo2 = Portb.3 , Reload = 10 'Turmservo x
Config Portd = Output
Config Pinb.3 = Output


Enable Interrupts
'Ende Servo Config

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung

Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein


Const Ref = 5 / 1023 'Für Batteriespannungsberechnung



Dim Volt As Single
Dim D As Integer
Dim I As Byte
Dim L As Integer

Dim H As Integer
Dim K As Integer
Dim M As Integer
Dim N As Integer

Dim S As Integer


Dim A0 As Integer
Dim A1 As Integer
Dim A2 As Integer
Dim A3 As Integer
Dim A2_l As Integer
Dim A2_l1 As Integer
Dim A2_l2 As Integer
Dim A2_l3 As Integer
Dim A2_lm As Integer


Dim A2diff1 As Integer
Dim A2diff2 As Integer


Dim A2_r As Integer
Dim A2_r1 As Integer
Dim A2_r2 As Integer
Dim A2_r3 As Integer
Dim A2_rm As Integer
Dim A2_wd As Integer

Dim Groesser As Integer
Dim Pos As Integer


Dim X As Integer
Dim Y As Integer

'-------------------------
Dim Center As Integer
Dim Left As Integer
Dim Right As Integer
Dim Leftmax As Integer
Dim Rightmax As Integer
Dim Right1 As Integer
Dim Right2 As Integer
Dim Right3 As Integer
Dim Left1 As Integer
Dim Left2 As Integer
Dim Left3 As Integer


Left = 130
Right = 70
Left1 = 135
Left2 = 150
Left3 = 165
Right1 = 65
Right2 = 50
Right3 = 35

Leftmax = 180
Rightmax = 20
Center = 100


S = 0




Servo(1) = Center
'-------------------------


Dim Center2 As Integer
Dim Oben As Integer
Dim Unten As Integer
Dim Obenmax As Integer
Dim Untenmax As Integer

Oben = 90
Unten = 110
Obenmax = 70
Untenmax = 130


Servo(2) = Center


'String auf Display anzeigen



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

'Ports für linken Motor
Config Pinc.6 = Output 'Linker Motor Kanal 1
Config Pinc.7 = Output 'Linker Motor Kanal 2
Config Pind.4 = Output 'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output 'Rechter Motor Kanal 1
Config Pinb.1 = Output 'Rechter Motor Kanal 2
Config Pind.5 = Output 'Rechter Motor PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02 'Prescaler = 8



Sound Portd.7 , 200 , 400
Wait 3
Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "init..."
Sound Portd.7 , 200 , 400
Sound Portd.7 , 200 , 400
Wait 1

Cls 'loesche das LCD Display
Locate 1 , 3 'Cursor auf 1 Zeile, 1 Spalte
Lcd "start..." 'String auf Display anzeigen







L = 100 'beschleunigen
Do
Servo(1) = L
Waitms 20
L = L + 1
Loop Until L > 170


'Motoren Einschalten!!!
Portb.0 = 1
Portb.1 = 0
Portd.5 = 1

Portc.6 = 0
Portc.7 = 1
Portd.4 = 1

Pwm1a = 600
Pwm1b = 600
L = 170 'beschleunigen
Do
Servo(1) = L
Waitms 20
L = L - 1
Loop Until L < 30


Pwm1a = 0
Pwm1b = 0


Servo(1) = 100





'------------------
Wait 1

Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Starte"
Locate 2 , 1
Lcd "programm"



Servo(2) = 100




Sound Portd.7 , 200 , 400

Wait 1

'Motoren Einschalten!!!
Portb.0 = 1
Portb.1 = 0
Portd.5 = 1

Portc.6 = 1
Portc.7 = 0
Portd.4 = 1






'###################################
Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Go"

L = 0 'beschleunigen
Do
Pwm1a = L
Pwm1b = L
Waitms 30
L = L + 50
Loop Until L > 1023




'Scout Routine *#*#*#*#*#*#
'*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#

N = 0

Do


Servo(1) = Center
Servo(2) = Center


Anfang:


N = N + 1






'Messung der Abstände:
Start Adc
A0 = Getadc(0)
A1 = Getadc(1)
A2 = Getadc(2)
D = Getadc(6)

Volt = D * Ref
Volt = Volt * 5.2941



If Volt < 5.8 Then Gosub Akkuwarnung

If A0 > A1 Then
If A0 > 255 Then
If A0 < 290 Then Gosub Rechtslenken
End If
End If

If A1 > A0 Then
If A1 > 255 Then
If A1 < 290 Then Gosub Linkslenken
End If
End If

If A0 > 290 Or A1 > 290 Or A2 > 340 Then Gosub Ausweichen

If N > 1000 Then Gosub Kameradrehung1

If M = 2 Then Gosub Kameradrehung2

If M = 3 Then
Servo(1) = 100
M = 0

End If

If S > 15000 Then Gosub Idlemode



M = 0


H = 0




'Motoren Einschalten!!!
Portb.0 = 1
Portb.1 = 0
Portd.5 = 1

Portc.6 = 1
Portc.7 = 0
Portd.4 = 1






Pwm1a = 1023
Pwm1b = 1023





Loop






'++++++++++++++ S U B s ++++++++++++++++++++++++++++++++++
'|||||||||||||||||||||||
'VVVVVVVVVVVVVVVVVVVVVVV

Akkuwarnung:

Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Volt="
Locate 2 , 1
Lcd Volt 'String auf Display anzeigen


Do

Pwm1a = L
Pwm1b = L
Waitms 40
L = L - 10
Loop Until L < 1

Pwm1a = 0 'Linker Motor aus
Pwm1b = 0 'rechter Motor aus


'****** S O S **********
Sound Portd.7 , 200 , 400
Waitms 100
Sound Portd.7 , 200 , 400
Waitms 100
Sound Portd.7 , 200 , 400
Waitms 100
Sound Portd.7 , 1000 , 400
Waitms 200
Sound Portd.7 , 1000 , 400
Waitms 200
Sound Portd.7 , 1000 , 400
Waitms 200
Sound Portd.7 , 200 , 400
Waitms 100
Sound Portd.7 , 200 , 400
Waitms 100
Sound Portd.7 , 200 , 400



Start Adc
A0 = Getadc(0)
A1 = Getadc(1)
A2 = Getadc(2)

Servo(2) = 100
L = 100 'beschleunigen
Do
Servo(2) = L

Waitms 30
L = L + 1
Loop Until L > 130






Goto Ende




'Soll sich noch ausrichten damit er weit sehen kann
'
'
'
Return



















'************* AUSWEICHEN ******************
Ausweichen:
Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hindernis"
Locate 2 , 1
Lcd "erkannt"

'## STOP
Pwm1a = 0
Pwm1b = 0


H = H + 1 'Dead Lock Zähler

If H > 5 Then Goto Deadlock
Servo(1) = Right

Waitms 150
'Servo kopf drehen, rechts links vermessen.
A2_r = Getadc(2) 'Sensor links auslesen und A2_l zuweisen


Servo(1) = Left

Waitms 250
'Servo kopf drehen, rechts links vermessen.
A2_l = Getadc(2)




















Waitms 150

Servo(1) = 100


'Sensordatenauswertung
'-------------------------------------------





If A2_r > A2_l Then 'wenn links mehr platz als rechts



If A0 > A1 Then ' Dann Zurückfahren Und Nach Links Drehen


'stop
Pwm1a = 0
Pwm1b = 0

'Linker Motor rückwärts
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor vorwärts
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN

'###########
'nach links drehen

Pwm1a = 1023
Pwm1b = 1023

Waitms 350

'stop
Pwm1a = 0
Pwm1b = 0

End If


'<<<<<< >>>>>>>>>>> >>>>>>>>>> <<<<<<<<<<<<<<




If A1 > A0 Then ' Dann Zurückfahren Und weit Nach links Drehen


'stop
Pwm1a = 0
Pwm1b = 0

'Linker Motor rückwärts
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor vorwärts
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN

'###########
'nach links drehen

Pwm1a = 1023
Pwm1b = 1023

Waitms 750

'stop
Pwm1a = 0
Pwm1b = 0

End If







Cls








End If









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



If A2_l > A2_r Then 'wenn rechts mehr platz als links


If A1 > A0 Then 'dann zurückfahren und nach rechts drehen


'stop
Pwm1a = 0
Pwm1b = 0

Servo(2) = Unten

'Rechter Motor rückwärts
Portb.0 = 0 'bestimmt Richtung rechter Motor
Portb.1 = 1 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


'Linker Motor vorwärts
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN



'###########
'nach rechts drehen

Pwm1a = 1023
Pwm1b = 1023

Waitms 550

'stop
Pwm1a = 0
Pwm1b = 0

End If

'<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>< <<<<<<<<<<<< >>>>>>>>>>>>>

If A0 > A1 Then 'dann zurückfahren und weit nach rechts drehen


'stop
Pwm1a = 0
Pwm1b = 0

Servo(2) = Unten

'Rechter Motor rückwärts
Portb.0 = 0 'bestimmt Richtung rechter Motor
Portb.1 = 1 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


'Linker Motor vorwärts
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN



'###########
'nach rechts drehen

Pwm1a = 1023
Pwm1b = 1023

Waitms 850

'stop
Pwm1a = 0
Pwm1b = 0

End If




End If




Goto Anfang



Return








'************ Rechtslenken ****************
Rechtslenken:



H = H + 1 'Dead Lock Zähler

If H > 5 Then Goto Deadlock

Servo(1) = 110
Servo(2) = Oben

Pwm1a = 1023
Pwm1b = 300

Waitms 250

Pwm1a = 1023
Pwm1b = 1023
Servo(1) = 100

Goto Anfang

Return












'************ linkslenken ****************
Linkslenken:



H = H + 1 'Dead Lock Zähler

If H > 5 Then Goto Deadlock

Servo(1) = 90
Servo(2) = Oben
Pwm1b = 1023
Pwm1a = 300

Waitms 250

Pwm1a = 1023
Pwm1b = 1023
Servo(1) = 100

Goto Anfang

Return












'************ Abstand ****************
Abstand:




M = 1





Goto Anfang

Return



'*****************

Kameradrehung1:


Pwm1a = 1023
Pwm1b = 1023

X = 100


Do
Servo(1) = X
Waitms 20
X = X + 5
Loop Until X > 130
N = 0



M = 2

Goto Anfang

Return

'**********************

Kameradrehung2:

Pwm1a = 1023
Pwm1b = 1023

X = 130

Do
Servo(1) = X
Waitms 20
X = X - 5
Loop Until X < 70
X = 100

M = 3

Goto Anfang

Return









Timer_irq:
Timer2 = Timervorgabe

S = S + 1



Return










Idlemode:


Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Ausrichtung"
Locate 2 , 1
Lcd "gestartet"

Pwm1a = 0
Pwm1b = 0

Servo(2) = 90


Servo(1) = Right3
Waitms 450
A2_r3 = Getadc(2) 'Sensor links auslesen und A2_l zuweisen


Servo(1) = Right2
Waitms 350
A2_r2 = Getadc(2)

Servo(1) = Right1
Waitms 350
A2_r1 = Getadc(2)

Servo(1) = Center
Waitms 350
A2 = Getadc(2)

Servo(1) = Left1
Waitms 350
A2_l1 = Getadc(2)

Servo(1) = Left2
Waitms 350
A2_l2 = Getadc(2)

Servo(1) = Left3
Waitms 350
A2_l3 = Getadc(2)






'Größten Wert suchen - mit 2 Werte vergleichen und kleineren ignorieren
Y = 0

If A2_r3 > A2_r2 Then
Groesser = Right3
Pos = 800
Y = 1
End If

If A2_r2 > Groesser Then
Groesser = A2_r2
Pos = 500
Y = 1
End If

If A2_r1 > Groesser Then
Groesser = A2_r1
Pos = 250
Y = 1
End If

If A2 > Groesser Then
Groesser = A2
Pos = 0
Y = 1
End If

If A2_l1 > Groesser Then
Groesser = A2_l1
Pos = 250
Y = 2
End If

If A2_l2 > Groesser Then
Groesser = A2_l2
Pos = 500
Y = 2
End If

If A2_l3 > Groesser Then
Groesser = A2_l3
Pos = 800
Y = 2
End If



If Y = 1 Then

'Rechter Motor rückwärts
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


'Linker Motor vorwärts
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN



'###########
'nach rechts drehen

Pwm1a = 1023
Pwm1b = 1023

Waitms Pos

'stop
Pwm1a = 0
Pwm1b = 0

End If





If Y = 2 Then

'Rechter Motor rückwärts
Portb.0 = 0 'bestimmt Richtung rechter Motor
Portb.1 = 1 'bestimmt Richtung rechter Motor
Portd.5 = 1 'rechter Motor EIN


'Linker Motor vorwärts
Portc.6 = 1 'bestimmt Richtung
Portc.7 = 0 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN



'###########
'nach rechts drehen

Pwm1a = 1023
Pwm1b = 1023

Waitms Pos

'stop
Pwm1a = 0
Pwm1b = 0


End If

Servo(1) = 100


Servo(2) = 70

Wait 1

A2 = Getadc(2)









S = 0


Do





A2diff1 = Getadc(2)

Waitms 500

A2diff2 = Getadc(2)

A2_wd = A2diff2 - A2diff1

If A2_wd > 30 Then
S = 32000
End If


Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd A2diff1

Loop Until S > 30000

S = 0

Servo(1) = 100
Servo(2) = 100

Goto Anfang

Return









Deadlock:

Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Deadlock"


Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800




'Linker Motor rückwärts
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor rückwärts
Portb.0 = 0 'bestimmt Richtung rechter Motor
Portb.1 = 1 'bestimmt Richtung rechter Motor
Portd.5 = 1


Pwm1a = 900
Pwm1b = 900

Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Sound Portd.7 , 300 , 200
Sound Portd.7 , 300 , 800
Sound Portd.7 , 300 , 200


Waitms 450

Pwm1a = 0
Pwm1b = 0


'Linker Motor rückwärts
Portc.6 = 0 'bestimmt Richtung
Portc.7 = 1 'bestimmt Richtung
Portd.4 = 1 'Linker Motor EIN

'Rechter Motor rückwärts
Portb.0 = 1 'bestimmt Richtung rechter Motor
Portb.1 = 0 'bestimmt Richtung rechter Motor
Portd.5 = 1

Pwm1a = 700
Pwm1b = 700


Waitms 250





Pwm1a = 0
Pwm1b = 0

Goto Anfang



Return




Ende:



das ist mein komplettes programm...



interessieren dürfe dich aber nur der Anfang.. wie ich das LCD konfiguriert habe..

irgendwie bin ich schon arg an der leistungsgrenze des RN control..

der timer1 für PWM und ein Timer2 für ungefähr zeitgesteuerte pausen stören sich glaub teilweise.. jedenfalls zucken die servos viel mehr als ohne den zweiten timer..

gleichzeitig verlangsamt das LCD mein komplettes system..
normalerweise hat sich er servoturm alle 2 sekunden gedreht und rechts links während dem fahren vermessen.. (radarähnlich)..
das geschieht jetzt alle ~10 sek..
obwohl ich als bedingung genannt habe, dass er nach 1000 do/loop schleifen jedesmal diese bewegung machen soll.. :-\

Jon
19.01.2007, 12:41
1. Verwendest du wirklich einen 16MHZ Quarz? Nochmal bei den Fusebits kontrollieren.
2.Du verwendest extrem viele variablen. Das kann bewirken, dass er zum Durchlaufen des Progs länger braucht.

jon

nooob
19.01.2007, 15:05
ja schon.. wurde ja schon von werk eingestellt ;-) und ich habs grad kontrolliert..

mh ja.. die variablen könnte ich mal bereinigen.. ich denk mit ein paar weniger komme ich aus..

Jon
19.01.2007, 16:18
*Pfff*
Ich bin etwas ratlos. Vielleicht geht es ja, wenn ud ein paar Variablen rasgeschmissen hast, besser.

jon

nooob
19.01.2007, 16:29
ich hab au schon das minimalprogramm laufen lassen.. also nur config LCD und dann was schreiben lassen.. :-\

.. naja geht ja erstmal so .. messwerte und so sind ja eh kurz..
aber ich kümmer mich drum..

also ich hab den 2ten timer rausgeschmissen.. der nur dafür sorgte dass der roboter nach 5min anhält.. sich im raum so ausrichtet dass er "am weitesten sehen kann" und dann den abstand alle 0,5 sec misst und die abstände vergleicht um zu erkennen ob jemand vorbeikommt.. :-)

jetzt funktioniert wenigstens der "radar"-schwenk modus alle 2 sec während der fahrt wieder..

da das board so langsam an der leistungsgrenze ist..
welches kann man denn so als steigerung betrachten??
ich möchte nämlich eigentlich noch paar sensoren wie Helligkeit (für automatische scheinwerfersteuerung, Kompass, Sonar, RN speak, anschliessen... :-\

Jon
19.01.2007, 20:08
da das board so langsam an der leistungsgrenze ist..
welches kann man denn so als steigerung betrachten??
Schwierig. Leistungssteigerung geht eigentlich nur mit einer höheren Quarzfrequenz. Und da gibt es, soweit ich weiß keine nschnelleren ATMega.
Du kannst zwar Overclocking machen, aber damit gehen dir auch Funktionen verlohren. Ist also nicht so wirklich was.


ich möchte nämlich eigentlich noch paar sensoren wie Helligkeit (für automatische scheinwerfersteuerung, Kompass, Sonar, RN speak, anschliessen... :-\
Verständlich.

Aber trotzdem ist es komisch, dass er so langsam geworden ist. Ich bin radlos. ](*,) ](*,)

jon

nooob
19.01.2007, 22:04
ich mach ein video... dann sieht man was er so gleichzeitig macht..