Autor |
simples BASCOM Programm?!?!? könnt ihr mir beim erklären helfen???? |
|
|
|
|
BID = 374414
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
|
Da kenn ich keine ...
mfg
_________________
|
|
BID = 374419
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
|
oder ne seite wo man übungsaufgaben hat und sich die lösung später angucken kann?
_________________
-----------------------------
---MfG Bastelheini---
----------------------------- |
|
BID = 374749
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
hi ich hab noch mal ein einfaches lauflicht geschrieben...
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 1200
Ddrb = &B1111111
Anfang:
Waitms 10
Portb = &B00000001
Waitms 10
Portb = &B00000010
Waitms 10
Portb = &B00000100
Waitms 10
Portb = &B00001000
Waitms 10
Portb = &B00010000
Waitms 10
Portb = &B00100000
Waitms 10
Portb = &B01000000
Waitms 10
Portb = &B10000000
Goto Anfang
das ganze werd ich dann auch noch mal in einer DO LOOP schleife machen....vielleicht mit verschiedenen modi
_________________
-----------------------------
---MfG Bastelheini---
-----------------------------
|
BID = 377207
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
hi
da jetzt alles nötige angekommen und aufgebaut ist kann ich weiter fragen
und zwar:
kann es sein das bascom bei dem befehl "waitms" keine variablen annimmt? also ich nicht b als zeit festlegen kann und a dann irgendwo verändern kann?
wie funktioniert das mit den interrupts?
ich wollte ein programm schreiben, in dem 2 led's abwechselnd blinken. zwischen beiden blinkbefehlen wird jeweils "waitms" gesetz.....standartwert sollte da 50 sein und ich wollte es so lösen: "b=50"
dann sollte bei tstendruck (t1) b=50 werden bei taster2 b=b+10 und bei taster3 b=b-10.......dazu brauche ich doch aber die interrupts oder?
_________________
-----------------------------
---MfG Bastelheini---
-----------------------------
|
BID = 377226
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
ich noch mal.....das mit variablen funktioniert doch.....ging bloß vorhin nicht....hab keine ahnung warum....
also bräuchte ich jetzt nur noch die interrupt erklärung.....
_________________
-----------------------------
---MfG Bastelheini---
-----------------------------
|
BID = 377250
Humus Aus Forum ausgetreten
|
Moin Moin,
also zum Thema Interrupts hilft dir das sicherlich weiter:
Du musst bei Einführung 5 schauen.
http://rowalt.de/mc/index.htm
Desweitern kann ich dir das Buch von Roland Walter nur ans Herzlegen, siehe Link!
Dann zu deinem Lauflicht, das hast du jetzt meiner Meinung nach etwas umständlich geschrieben kann man sich auch etwas vereinfachen mit hilfe von Arrays.
So hier den Code zu deinem Lauflicht:
Code : |
'Lauflicht.bas
'----------------------------------------------------------------------
$Regfile = "m8def.dat" 'ATmega8
$Crystal = 4000000 '4 MHz
DDRD = &B11111111 'PortD als Ausgang festlegen
PORTD = &B00000000 'alle LEDs aus
'Variablen definieren
Dim LED(8) As Byte 'Array mit 8 Feldern definieren
Dim zaehler As Byte
LED(1) = 0 : LED(2) = 1 : LED(3) = 2 : LED(4) = 3 : LED(5) = 4 : LED(6) = 5 : LED(7) = 6 : LED(8) = 7 'Array felder mit Werten Füllen
'Hauptschleife
Do
For zaehler = 1 To 8 Step 1
Toggle PORTD.LED(zaehler)
Waitms 250
Toggle PORTD.LED(zaehler)
Next zaehler
Loop
End
|
|
Der Befehl Toggle invertiert den Aktuellen Wert von PORTD.
Wenn du Fragen zu dem Programm hast sag bescheid!
[ Diese Nachricht wurde geändert von: Humus am 12 Okt 2006 16:53 ]
|
BID = 377301
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Hallo Bastelheini,
du kannst die INTn-Quellen benutzen.
Schau mal ins Datenblatt, dort stehen alle wichtigen Register, die man beschreiben muss.
Dann schließt du deine Taster an die INT-Eingänge an. Einen Pull-Up nach VCC und einen Pin des Tasters auf Masse. Wird nun der Taster gedrückt, ensteht kurzeitig ein LOW-Pegel. Wenn man einstellt, dass der Interrupts ausgeführt wird bei einer fallenden Flanke wird nun ein Unterprogramm aufgerufen. Dort solltest du entsprechende Maßnahmen zur Entprellung des Tasters treffen. (z.B. einige 10ms warten, bis der Taster sich beruhigt.)
Du musst ebenfalls im Programm deine Interrupts anschalten:
Enable Interrupts
Dann musst du jedes einzelne Interrupts aktivieren:
Enable INT0 'Taste 1
Enable INT1 'Taste 2
Dann müssen die Labels für das zu startende Unterprogramm angegeben werden:
On INT0 Goto taste1_druck
On INT1 Goto taste2_druck
Danach müssen noch die Einstellungen für das Triggern eingestellt werden, wie das geht, steht im Datenblatt und/oder in der BASCOM-Hilfe zu den INTs.
Im Programm sind nun irgendwo deine Labels:
taste1_druck:
[es folgt Code, der nicht zu lang sein sollte]
Return 'Springt wieder an die Stelle, wo das laufende Programm durch den Interrupts unterbrochen wurde.
_________________
|
BID = 377446
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
hi
@humus
ich fang gleich mal mit den fragen an
also "Dim LED(8) As Byte"
legt led(1), led(2), led(3),...led(8) sozusagen als einzelne variablen an, die aber numeriert sind!? soweit richtig?
und ein array ist sozusagen eine tabelle in der daten abgelegt werden...dann stellt "LEDxxx" die spalte dar und "(X)" die zeile?!?!?
und zb "led(4) =3 heist, dass PD4 auf high geschaltet wird?!?!? ja?
nur warum invertierst du den wert mit dem befehl toggle?????? das begreif ich noch nicht so ganz?!
das auf rowalt.de les ich mir gleich mal durch....
@doncomi
ich werde es mal probieren und dann wieder berichten ob es geklappt hat....
_________________
-----------------------------
---MfG Bastelheini---
-----------------------------
|
BID = 377471
Humus Aus Forum ausgetreten
|
Zitat :
| also "Dim LED(8) As Byte"
legt led(1), led(2), led(3),...led(8) sozusagen als einzelne variablen an, die aber numeriert sind!? soweit richtig? |
Ja!
Zitat :
| und ein array ist sozusagen eine tabelle in der daten abgelegt werden...dann stellt "LEDxxx" die spalte dar und "(X)" die zeile?!?!? |
Ja!
Zitat :
| und zb "led(4) =3 heist, dass PD4 auf high geschaltet wird?!?!? ja? |
Nein!
LED(4) = 3
LED(4) ist meine Variable in die ich den Wert 3 lade. Dieser Wert steht für die PORT - Nummer: PD0...PD7. In deinem Beispiel wäre es der PORTD3.
Zitat :
| nur warum invertierst du den wert mit dem befehl toggle?????? das begreif ich noch nicht so ganz?! |
Icb Invertiere den Wert, da meine PORTs vorher alle auf 0 sind d.h. Ausgeschaltet sind, 0 Invertiert = 1 Ausgeschalter invertiert Eingeschaltet. Verstanden?
Und dies mach ich zwei mal mit toggle. Einmal zum einschalten und das zweite mal zum ausschalten. Dazwischen liegt meine Wartezweit "WaitMs 250" .
Was ich dir noch empfehlen kann ist die Hilfe von Bascom auch sehr hilfreich.
hoffe, ich hab das einigermaßen verständlich erklärt, ansonsten einfach weiter Fragen!
|
BID = 377477
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
danke jetzt habe ichs verstanden.....werd mich noc´h bisschen über interrupts und PWM einlesen....danke
hat du ein paar ansatzpunkte zur PWM?
_________________
-----------------------------
---MfG Bastelheini---
-----------------------------
|
BID = 377524
Humus Aus Forum ausgetreten
|
|
BID = 379292
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
So, es ist immer hilfreich, sich die entsprechenden Datenblaetter durchzulesen, da dort die Hardware und alle wichtigen Register beschreiben sind.
Die BASCOM-Befehle wuerde ich dafuer nicht benutzen.
Schoene Gruesse aus Assuan, Aegypten
_________________
|
BID = 384476
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
hallo ich mal wieder....
kann mir jemand sagen warum dieses programm zur PWM nicht funktioniert.... egal welchen wert ich bei "compare1a=2 einsetze.....die led ist immer aus.......am anfang des programmes lasse ich sie kurz an und wieder ausgehen es liegt also weder an der led noch am atmega8..........
$regfile = "m8def.dat"
$crystal = 8000000
Config Pind.5 = Output
Portd.5 = 1
Waitms 15
Portd.5 = 0
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
Do
Compare1a = 55
Loop
End
ich bin ratlos....:-(
_________________
-----------------------------
---MfG Bastelheini---
-----------------------------
|
BID = 384536
PhyMaLehrer Schriftsteller
Beiträge: 911 Wohnort: Leipzig
|
Also, ich habe diese Funktion noch nicht selbst benutzt (deshalb bitte um Nachsicht, falls ich mich irre), aber sind für PWM-Ausgaben nicht zwei Ausgänge festgelegt - OC1A (PB.1) und OC1B (PB.2)?
|
BID = 384560
bastelheini Schriftsteller
Beiträge: 618 Wohnort: Sachsen
|
ach soooooo dann ist das die HARDWARE PWM und nicht software PWM......aha..........wie mache ich das dann softwareseitig sodass ich einen beliebigen pin zur PWM nehmen kann? kann mir da einer ein (komentiertes) beispielprogramm schreiben? wäre nett!
_________________
-----------------------------
---MfG Bastelheini---
-----------------------------
|