PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom Einsteigerprogramme



High Light
15.09.2009, 19:46
Hallo zusammen,

ich habe dieses Thema aufgemacht, aus diesem Grund:
Ich bin eigentlich noch ein Anfänger in Bascom.
Habe aber noch Großes vor damit vor^^
Jetzt habe ich schon ein recht großes Programm geschrieben,
aber an manchen Ecken hackt es noch.

Hier mal ein stark vereinfachtes Programm:
Warum geht das nicht?????????????


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

Config Portc = Input
Config Portd = Output

PortD = &H03

'Taste A soll Lampe A einschalten
If Portc.0 = 0 Then
Portd.0 = 1

'Oder Taster B soll Lampe B einschalten
Elseif Portc.1 = 0 Then
Portd.1 = 1
End If

Return

End

Vlt kann mir ja jemand helfen???
Bin für alles dankbar!!!

Gruß High Light

mycroc
15.09.2009, 21:34
versuch mal folgendes:


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

Config Portc = Input
Config Portd = Output

PortD = &H03

'Taste A soll Lampe A einschalten
If Pinc.0 = 0 Then
Portd.0 = 1

'Oder Taster B soll Lampe B einschalten
Elseif Pinc.1 = 0 Then
Portd.1 = 1
End If

Return

End

PicNick
16.09.2009, 06:34
1) Ein DO..LOOP verlängert die Laufzeit.

2) Wohin soll der "RETURN" zurückspringen ?

High Light
16.09.2009, 16:49
Danke für die 1A-Hilfe jetzt funktionierts...juhuuu... =D>

Habe es nun mit DO...LOOP realisiert, aber warum hat es nicht mit "RETURN"
funktioniert, muss man da eine Marke setzen oder irgendetwas???
Wann benutze ich dann "Return"???

So und nun zum Teil 2^^:


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

Config Portc = Input
Config Portd = Output

Portc = &H03

Portd = 0

Do
'Taste A soll Lampe A einschalten
If Pinc.0 = 0 Then
Pind.0 = 1

'Oder Taster B soll Lampe B einschalten
Elseif Pinc.1 = 0 Then
Pind.1 = 1

'Oder mit Taster C Lampe A und B ausschalten
Elseif Pinc.2 = 0 Then
Pind.0 = 0
Pind.1 = 0
End If

Loop

End

So und nun zum Problem:
Taster A und B sollen nur einschalten können, und Taster C beide Lampen
ausschalten. Jedoch wird im Moment noch nicht das Einschaltesignal so
gespeichert, dass der Taster A oder B nur einschalten können, denn diese
schalten auch wieder manchmal aus.
Taster C zeigt im Moment gar keine Funktion!!!
Ich brächte hier so eine Art SR-Baustein.

Kann mir jemand weiter helfen???

Bin gerade kurz voe dem Verzweifeln, weil Taster C gar keine Funktion
zeigt!!!!

Gruß High Light

mycroc
16.09.2009, 18:42
hallo,
ich habe deine code etwas geändert und beschriftet


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

Config Portc = Input
Config Portd = Output

Portc = &H03

Portd = 0

Do
'Taste A soll Lampe A einschalten
If Pinc.0 = 0 Then 'hier wird der Pin abgefragt
Portd.0 = 1 ' und hier wird der Port gesetzt

'Oder Taster B soll Lampe B einschalten
Elseif Pinc.1 = 0 Then 'mit "pin" Pinc.1 lesen
Portd.1 = 1 'und mit "port" Portd.1 setzen

'Oder mit Taster C Lampe A und B ausschalten
Elseif Pinc.2 = 0 Then 'lesen mit Pin
Portd.0 = 0 'schreiben mit Port
Portd.1 = 0 'schreiben mit Port
End If

Loop

End

High Light
16.09.2009, 19:56
Danke für die Beschriftung funktioniert aber nicht,
da geht weniger wie vorher^^.
Warum eigentlich jetzt wieder portc.1 und nich Pinc.1?
Da mit "Return", weiß dass auch jemand?

Gruß

Tido
16.09.2009, 22:46
Mit Return springst du zurück aus einer Subroutine an die Stelle nach dem Aufruf (gosub "subroutine") derselben. Es wird nicht an den Programmanfang gesprungen.

High Light
18.09.2009, 14:46
Achso, jetzt macht dass Sinn :-D

Aber um auf mein Problem zurück zu kommen,
warum funktioniert dieses Programm nicht?

Ich kenne aus der Digitaltechnik SR-Bausteine,
gibt es so was auch in Bascom?

Ich muss irgendwie einen Speicher setzen und wieder rücksetzen können.
Mein Problem im Programm habe ich ja oben schon geschildert.

Wäre über jede Hilfe dankbar!!!

Gruß Patrick

High Light
21.09.2009, 16:46
Hallo zusammen,
kann mir den niemand bei meinem Problem helfen?
solangsam bin ich am verzweifeln :-s

Hier nochmal der Code:


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

Config Portc = Input
Config Portd = Output

Portc = &H03

Portd = 0

Do
'Taste A soll Lampe A einschalten
If Pinc.0 = 0 Then
Pind.0 = 1

'Oder Taster B soll Lampe B einschalten
Elseif Pinc.1 = 0 Then
Pind.1 = 1

'Und mit Taster C Lampe A und B ausschalten
Elseif Pinc.2 = 0 Then
Pind.0 = 0
Pind.1 = 0
End If

Loop

End

Wäre echt Klasse wenn mir jemand sagen könnte wiso dass nich geht???


Gruß High Light

Tido
21.09.2009, 18:58
Meine Vermutung:

Mit pinx.y liest du einen Port als Eingang.
Mit portx.y schreibst du einen Port als Ausgang.

Deshalb muss es in deinem Programm bei den Lampen z.B. Portd.1 = 1 heißen.
Analog bei der anderen Lampe und natürlich auch beim Ausschalten.

Ich bringe Pin und Port selbst immer durcheinander. Hoffe, ich hab's diesmal richtig erklärt!

EDIT: myroc hat das übrigens in "seinem" Programm auch so vorgemacht, wer Lesen kann, ist klar im Vorteil O:)

Neutro
21.09.2009, 19:43
Hali Hallo,

PortX.Y = Ausgang
PinX.Y = Eingang
Lese dir bitte noch mal diese Tutorials durch, ich denke das dann einiges klarer werden wird, damit deine großen Vorhaben auch realisiert werden können :-)
http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/
Hier stehem die Grundlagen eigentlich sehr gur beschrieben.

Ich hoffe ich konnte dir weiterhelfen und viel Erfolg noch.

Gruß
Neutro

High Light
22.09.2009, 19:38
Danke Neutro, hast mir sehr weiter geholfen!!!
Jetzt verstehe ich auch dass mit Ausgängen und Eingängen,
was aus meiner sicht recht wenig Sinn mit Portx.y oder
Pinx.y macht. Aber gut so ist es halt.
Jetzt ist aber folgendes Problem. Lampe A brennt nur noch!!!!
Ich bekomme diesen Ausgang nicht mehr aus genau so wie
alle anderen Auf PortD außer den Portd.1.
Woran kann das leigen?
Fusebits, oder igrendetwas verstellt?
Oder Controller kaputt?

Deswegen hat auch das letzte Programm nicht funktioniert.

Gruß High Light

Neutro
22.09.2009, 20:09
Wenn du testen willst ob die einzelnen Oorts noch funktionieren dann versuche mal folgendes:

do
If pinx.y = 0 Then
waitms 50
toggle Portx.y
end if

Loop

Jetzt brauchst du nur noch x und y durch die entsprechenden Buchstaben und Zahlen der einzelnen Ports zu ersetzen, bzw Taster und LED anschließen. Das Programm schaltet einfach nur bei Tastendruck
( If pinx.y = 0) einen Ausgangsport ein, (toggle Portx.y) bei wiederholten Tastendruck wieder aus.

Gruß

Neutro

High Light
25.09.2009, 19:56
Ok danke, dann werd ich das mal probieren.

Gruß High Light

High Light
06.11.2009, 20:06
So, inzwischen habe ich Fortschritte gemacht und ich muss sagen es funzt.
Und ich verstehe es immer besser.

Nun gibts aber ein neues Problem:

Ich möchte mit 3 Atmega88 über I2C kommunizieren.
Einen als Master und 2 als Slaves. Hardwaretechnisch
kein Problem aber das Programm dazu, ich verstehs einfach gar nicht!!!!!!!!
Zum heulen.
Und zwar soll der Master beispielsweise die Zahl 13 oder so an einen
Slave senden, und der Slave soll daraufhin in eine Scheliefe springen
diese abarbeiten und anschließend ein "ok" zurück an den Master senden.

Kann mir jemand hierzu ein Programm für Master und dan Slave
schreiben? Mit ganz viele Erklärungen, damit ich dass endlich
hinbekomme????
Bitte kann mir jemand helfen?????????????

Bin für alles dankbar.

Gruß High Light

High Light
12.11.2009, 07:59
Hat keiner Erfahrung mit I2C???

Richard
12.11.2009, 14:40
gibt es so was auch in Bascom?



Ja, toggle Pin.xyz. Damit wird Pin.xzy jedesmal invertiert.

Tipp, Die Bascom Beispiele mal so nach und nach ALLE
ausprobieren. Ist ne menge Arbeit, lohnt sich aber. Alles was
man schon einmal gemacht hat bleibt halt in den grauen Zellen
(halbegs) hängen.

In der Befehlsübersicht ist auch immer ein kleines Beispiel
und auch beschrieben was der Befehl bewirkt...einfach einmal
alle (1/2 h Tag) durchlesen...in 1...2..Wochen klappt das ganze
dann bedeutend besser! Du wirst Dich wundern was Bascom
so alles kann. :-)

Gruß Richard