simples BASCOM Programm?!?!? könnt ihr mir beim erklären helfen????

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 25 11 2024  10:19:02      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 | 3 Nächste Seite )      


Autor
simples BASCOM Programm?!?!? könnt ihr mir beim erklären helfen????

    







BID = 374331

bastelheini

Schriftsteller



Beiträge: 618
Wohnort: Sachsen
 

  


hallo

da ich nun in die welt der mikrocontroller einsteigen will und das ganze mit Bascom programmieren will hab ich mal im internet ein bisschen rumgesucht um ein tutorial zu finden.
ich bin auf diese seite gestoßen:
http://www.rowalt.de/index.htm



nun versteh ich aber einiges an diesem beispiel nicht:
(laut beschreibung soll bloß die rote led leuchten!)



'0001.BAS: Rote LED an Pin PD3, gelbe an Pin PD4, grüne an PD5
'--------------------------------------------------------------
$Regfile = "2313def.dat" 'AT90S2313
$Crystal = 3686400 'Quarz: 3.6864 MHz
DDRD = &B0001000 'Pin PD3 als Ausgang konfigurieren
PORTD = &B11111111 'PD0...PD7 auf High setzen
Do
Loop
End


wenn ich nun einen atmega8 programmieren will müsste die ersten zeile wiefolgt aussehen:
$Regfile = "2313def.dat" 'AT90S2313
$Crystal = 8000000 'Quarz: 8.0000 MHz


der befehl "DDRD=" legt nun fest ob und welcher pin ein ein- oder ausgang ist? stimmt das soweit?

wenn ich in den speicher schreibe, muss dann immer "&B" vorangestellt werden?

mit dem zeilenabschnitt "0001000" wird Pd3 als ausgang festgelegt.
wären dann bei "&B0001001" die pins Pd3 und Pd0 als ausgänge festgelegt? oder die pins PD3 und PD7???


und für was sind die PB pins da? (sieht man auf der experiementierplatine auf seiner website-->http://www.rowalt.de/mc/avr/avrboard/03/avrb03.htm)
------------------------------------------------



DDRD = &B0001000 'Pin PD3 als Ausgang konfigurieren
PORTD = &B11111111 'PD0...PD7 auf High setzen

in der ersten zeile wird PD3 als ausgang konfiguriert.
in der zweiten zeile werden aber alle auf high gesetzt...demzufolge liegt doch eigentlich an allen pins (PD0 bis PD7) eine spannung von 5 volt an--> demzufolge sind es ja doch ausgänge....
----------------

Do
Loop
End


heist das der status (die eine led an PD3 ist angeschaltet) immer wieder überprüft wird oder?
----------

dann hätte ich noch eine abschließende frage: wie kann ich das programm in bascom simulieren....also es soll auch zb eine led angehen...das entsprechende menü ist hja vorhanden ich komme nur nicht wirklich damit klar:-(

schon mal vielen dank fürs helfen


mfg bastelheini

BID = 374337

Her Masters Voice

Inventar


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 5308
Wohnort: irgendwo südlich von Berlin

 

  

Lies das Datenblatt zum Controller und die Hilfe zum BASCOM.
Wenn du einen M8 programmieren willst solltest du Diesen auch initialisieren.
Die Schlussschleife macht einfach nur garnix ausser immer wieder durchzulaufen, kann man auch getrost weglassen, dann wird das Programm durch die END Anweisung gestoppt.

_________________
Tschüüüüüüüs

Her Masters Voice
aka
Frank

***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************

BID = 374339

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo Bastelheini,

Du musst für den ATmega8 auch die entsprechende Definitionsdatei einbinden:

$regfile = "m8def.dat"

Dann musst du deine Taktfrequenz dem Compiler übergeben, nicht stumpf abschreiben, was im Tutorial steht:
(Aus den PNs habe ich erfahren, dass es 8MHz sind):

$crystal = 80000000 '8MHz


So, dann geht das Programm los:
Ich empfehle wärmstens, immer das passende Datenblatt im Hintergrund laufen zu haben, dann kann man sich schnell helfen:
Das Register DDRx legt fest, ob der entsprechende PIN ein Ein- oder Ausgang ist. Ist der Pin ein Eingang (entsprechendes Bit ist dann 0), dann lässt sich noch ein sog. Pull-Up-Widerstand an- oder ausschalten, indem man das entsprechende Bit im PORTx-Register setzt.
Es gibt also für alle IO-Pins 3 Register:

    * Das DDRx-Register (Data Direction Register) für Einstellung ob Ein- oder Ausgang
    * Das PORTx-Register für die Datenausgabe (wenn du hier ein Bit setzt, dann geht der entsprechende Pin auf High) (Wenn der Pin als Eingang definiert wurde und man die gleiche Bitposition in PORTx auf 1 setzt, dann wird der Pullup eingeschaltet. Weitere Kombinationen dieser beiden Register PORTx und DDRx bitte im Datenblatt nachsehen!)
    * Das PINx-Register für Dateneingabe (wenn ein Pin/bzw. der ganze Port) als Eingang definiert wurde, dann kannst du ihn hier auslesen.)


Das &B... ist ein Präfix für Binäre Schreibweise.
Es gibt auch z.b. noch &H für hexadezimale Zahlen.






Zur Sprache allgemein:

Ich halte nicht viel von BASCOM, aber ich versuche dir, auch da zu helfen, wo ich kann. Habe damit nur ca. 1 Monat gearbeitet, danach habe ich zu Assembler gewechselt.


Edit:
Simulation:
In der simulation kannst du unter "Register" alle Registerinhalte betrachten, unter "IO" kannst du dir alle IO-Register anzeigen lassen. So einfach ne LED zum Leuchten bekommst du das nicht aber du kannst die Hex-Werte ins binärsystem umrechnen, dann siehst du, ob das Bit gesetzt ist oder nicht. Sonst würde es auch ein anderer, viel besser Simulator tun, nämlich der von ATMEL selbst. Ist im AVR Studio 4 integriert.

Mit den Watches kannst du deine Variableninhalte betrachten und loggen. Unter "µP" kannst du dir das Statusregister und diverse Parameter wie Programmadresse und Stackpointer anzeigen lassen.





_________________


[ Diese Nachricht wurde geändert von: DonComi am  2 Okt 2006 13:51 ]

BID = 374343

bastelheini

Schriftsteller



Beiträge: 618
Wohnort: Sachsen

$regfile = "m8def.dat"

oh ja ich hab noch dran gedacht...abe dann isses mir entfallen...

@DonComi

"Dann musst du deine Taktfrequenz dem Compiler übergeben, nicht stumpf abschreiben, was im Tutorial steht:
(Aus den PNs habe ich erfahren, dass es 8MHz sind):

$crystal = 80000000 '8MHz"

hab ich ja gemacht-->"$Crystal = 8000000 'Quarz: 8.0000 MHz "


-->"Das DDRx-Register (Data Direction Register) für Einstellung ob Ein- oder Ausgang
" welche möglichkeiten gibt es für "x"? "D" weis ich ja schon
-----------------
aha also bei DDRD = &b1001011 weist PD0,PD1,PD4 und PD7 als ausgänge aus?
und mit der nächsten zeile:"PORTD = &b0000001" ist zb nur PD0 high und bei "PORTD = &b0001010" PD1 und PD3?

wenn ja hab ich schon mal was gelernt

------------------
"Das PINx-Register für Dateneingabe (wenn ein Pin/bzw. der ganze Port) als Eingang definiert wurde, dann kannst du ihn hier auslesen.)"

wie wird das dann geschrieben? also wenn ich zb den PD 2 einlesen will?

ich schreib gleich mal zur übung alles mit

$regfile = "m8def.dat" 'def datei einlesen
$crystal = 8000000 'taktfrequenz 8MHz festlegen
DDRD = &b11111011 'alle der sieben ausgänge außer PD2 als ausgänge festlegen
'un wie gehts nun weiter? in basic wohl so:
a=PIND &b00000100 'aber ich glaub nicht das man das so machen kann...




ich bin jetzt mal davon ausgegangen das der ATmega8 nur 7 ausgänge hat....in wirklichkeit sinds ja 23 I/O ports.....würde das dann so geschrieben:

" DDRD= &b00101010010101011101010"

(null und eins sind willkürlich gewählt)


mfg bastelheini

BID = 374346

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Zitat :

aha also bei DDRD = &b1001011 weist PD0,PD1,PD4 und PD7 als ausgänge aus?
und mit der nächsten zeile:"PORTD = &b0000001" ist zb nur PD0 high und bei "PORTD = &b0001010" PD1 und PD3?

Exakt! Stimmt alles!


Zitat :

[...]wie wird das dann geschrieben? also wenn ich zb den PD 2 einlesen will?
[...]a=PIND &b00000100 'aber ich glaub nicht das man das so machen kann... [...]

Fast, aber nicht ganz:


Code :


Dim A As Byte
A = PIND


Das wars. In A steht nun der Wert des Eingangsregisters.
Wenn dich nur ein Bit davon interessiert, dann maskiert man heraus:

A = A AND &B00001000 (Jedes Bit wird mit AND verknüpft. Nur 1 AND 1 ergibt 1, also sind alle Bits außer BIT3 0 und BIT3 nur dann 1, wenn auch BIT3 in PINx gesetzt ist.)



Zitat :
ich bin jetzt mal davon ausgegangen das der ATmega8 nur 7 ausgänge hat....in wirklichkeit sinds ja 23 I/O ports.....würde das dann so geschrieben:

" DDRD= &b00101010010101011101010"



Alle IO-Ports sind aufgeteil in 8Bit breite Einheiten.
Schau ins Datenblatt, es gibt teilweise für PortA nur wirklich 3 physikalisch existierende Pins.
Anfangen tuts bei PortA, PortB, PortC, PortD, ... ,



Zitat :

$crystal = 80000000 '8MHz"

hab ich ja gemacht-->"$Crystal = 8000000 'Quarz: 8.0000 MHz "

Mein Fehler

Das Datenblatt hilft weiter, unter "Pin Configurations" siehst du, welche IO-Pins wirklich vorhanden sind.
Daraus entsteht dann dein Programm.

_________________

BID = 374349

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

So, hier mal der interessante Auszug:
(Quelle: ATmega8-Datenblatt, vollständige Version Seite 2)




_________________

BID = 374353

bastelheini

Schriftsteller



Beiträge: 618
Wohnort: Sachsen

das es VB so ähnlich ist hab ich gar net gedacht....aber umso besser!!! da freu ich mich jetzt richtig...

"A = A AND &B00001000 (Jedes Bit wird mit AND verknüpft. Nur 1 AND 1 ergibt 1, also sind alle Bits außer BIT3 0 und BIT3 nur dann 1, wenn auch BIT3 in PINx gesetzt ist.)" das hab ich jetzt wieder mal nicht verstanden....
kannste da noch mal 2 verscjiedene beispiele schreiben? das ich direkt vergleichen kann? währe schön....

mfg bastelheini

edit:

ach jetzt hab ichs begriffen mit DDRD xyz weiße ich die PDx ausgänge aus mit DDRA die PAx ausgänge un das gleiche mit b, c,...

[ Diese Nachricht wurde geändert von: bastelheini am  2 Okt 2006 14:40 ]

BID = 374360

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Zitat :

das hab ich jetzt wieder mal nicht verstanden....
kannste da noch mal 2 verscjiedene beispiele schreiben? das ich direkt vergleichen kann? währe schön....


Hallo.
Wenn dich innerhalb eines Ports nur ein Bit interessiert (z.b. bit4), und die anderen komplett nichts mit dem bit4 zu tun haben und deren Status dich auch nicht interessiert, dann maskiert man diese Bits alle raus. Das bedeutet, ich lösche alle bits (die mich ja eh nicht interessieren) und prüfe, ob das Ergebnis günstig oder ungüstig ist:

Es hängt jetzt z.b. an PINA3 ein Taster, dessen Status ich wissen will. (Alle anderen Bits können Werte haben, die micht nicht interessieren, bzw. die meinen späteren Vergleich beeinträchtigen könnten):

Dim A As Byte

A = PINA 'Einlesen
A = A And &B00001000 'ich verknüpfe Bitweise alle Stellen von 0 bis 7

Jetzt gehen alle anderen Bits in A auf 0, da ja 1 oder 0 and 0 immer 0 gibt.

Angenommen, Der Taster ist an und führt nun 1-Pegel, dann steht in A nach der AND-Verknüpfung 0b00001000 (entspricht in Hex dann 0x8.
Ist Der Taster aber nicht gedrückt, dann ist A=0b00000000 (das entspricht in Hex dann 0)

Jetzt kann ich mit einer If-Abfrage ganz einfach rausfinden, ob die Taste gedrückt ist oder nicht:

If A = &H8 Then
...
End If


Würde ich vorher nicht alle anderen Bits rausschmeißen, dann müsste ich das ganze viel komplizierter machen.


---

Das war jetzt vllt. kein gelungenes Beispiel. Es soll nur verdeutlichen, dass man mit gezielten Bit-Manipulationnen schneller zum Erfolg kommt, als mit irgendwelchen komplizierten, ressourcenfressenden Funktionen oder anderen Klimmzügen.


Dazu solltest du dir bei gegebener Zeit auch mal die Operatoren:

XOR
OR
AND

anschauen.


Edit:


Zitat :

ach jetzt hab ichs begriffen mit DDRD xyz weiße ich die PDx ausgänge aus mit DDRA die PAx ausgänge un das gleiche mit b, c,...


Genau.
Mit z.b. PORTxn beschreibt man Sachen allgemein.
Konkret wird es, wenn ich PORTA3 oder so meine (x=A, n=3)
Das zu der Schreibweise im Datenblatt.

_________________


[ Diese Nachricht wurde geändert von: DonComi am  2 Okt 2006 14:56 ]

BID = 374382

bastelheini

Schriftsteller



Beiträge: 618
Wohnort: Sachsen

nein jetz hab ich alles geschrieben und dann kommt "Fehler auf der Seite".......das passiert mir jetzt zum 7. mal grrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

das ko*** mich jetzt an

also noch mal etwas kürzer:

dim b as byte
c:
b=PINB
b=b AND &b00100100
if a = &h24 then goto a else goto b

a:
......
goto end
b:
......
goto c
end:
end

das rote ist also der vergleichswert? die schleife macht solange das was in b: steht bis der wer gleich ist also die eingänge PB2 und PB5 high sind, erst dann springt er zu a

richtig/falsch?

mfg bastelheini

BID = 374387

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Nein, da wird der Compiler aber rummeckern...

Du hast ein Label, dass die gleiche Bezeichnung hat, wie eine Variable, du veränderst die Variable b und prüfst a, du springt zu einem Label 'end', dass es so nicht geben darf, da es bereits einen Befehl gibt, der End lautet.
Außerdem wird goto sehr ungern benutzt, weil es einfacher geht:

Dim A As Byte

Do While A<>&H24 'Schleife machen, solange A!=&H24 (sprich: Schleife, solange A ungleich &H24)
A=PINB AND &B00100100
Loop
...

Oder:

Dim A As Byte

Do
If (A And &B00100100) = &H24 Then
Exit Do
End If
Loop


Edit:

Zitat :

das rote ist also der vergleichswert?

Ja, unter anderem. Der andere Vergleichswert ist die Variable b.
Das Ergebnis dieser Verknüpfung ist danach in b gespeichert.

Mein Tipp: Vergiss erstmal diese Operatoren und widme dich leichteren Sachen. Diese Operatoren brauchst du noch früh genug. Erstmal Grundlagen, auch und vorallem in Basic lernen.



_________________


[ Diese Nachricht wurde geändert von: DonComi am  2 Okt 2006 16:16 ]

BID = 374391

bastelheini

Schriftsteller



Beiträge: 618
Wohnort: Sachsen

ok dann mach ich mich mit der DO LOOP schleife noch ma schlau....
ich machs bloß gern ausführlicher......aber wenns dann später ball um die letzten speicherrest geht un man nichts anderes weis seh ich das ein....

wie gesagt ich geh immer von VB 6.0 aus....da geht das nämlich...
ich meine den variablen einen anderen wert zu geben sollte kein problem sein....

"du veränderst die Variable b und prüfst a" hast ja recht.....wie sagt unser info lehrer in der ersten stunde"...und ihr werdet merken, 99% aller Fehler beruhen auf Tippfehlern."
wenn man ein ängeres projekt hat sucht man
sich dusselig...
nenne wir das label halt ende...

mfg bastelheini

BID = 374393

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Zitat :


wie gesagt ich geh immer von VB 6.0 aus....da geht das nämlich...


Natürlich geht das mit Goto.
Und im Endeffekt werden deine Basiczeilen in teils hunderte Assemblerbefehle zerlegt, wo u.U. sehr viele Sprünge gemacht werden.
Insofern war das auch alles OK, nur das mit den Labelnamen hätte beim Kompilieren einen Fehler verursacht.

Aber ich weiß nicht, ich mag bei Hochsprachen den GOTO-Befehl nicht so gern .

Wenns später um jedes 2. Byte im ROM des Controllers geht, schreibt man meist sowieso in Assembler.

(OK, mittlerweile sind die Speichergrößen so groß, dass es meist keine Rolle mehr spielt, Platz zu sparen. Da zählt dann als Hauptargument für Hochsprachen die Portierbarkeit auf andere Maschinen.)

_________________

BID = 374395

bastelheini

Schriftsteller



Beiträge: 618
Wohnort: Sachsen

ok gibts noch irgendwas was man am anfang brauchen könnte?
oder ne seite wo man übungsaufgaben hat und sich die lösung später angucken kann?

mfg bastelheini

BID = 374409

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Ich habe Programmiersprachen immer so gelernt, dass ich ein Problem hatte und dieses irgendwie lösen musste.

Meistens habe ich nur in die Hilfe geschaut. Dann ließt man solange, bis man die Lösung gefunden hat.

Insofern halte ich auch nicht viel von Tutorials. Meiner Meinung nach sollte man sowas selbstständig lernen, dann lernt man es auch wirklich. Abschreiben bringt nicht viel.


---

So habe ich es gemacht, dass muss nicht unbedingt der richtige Weg sein .

_________________

BID = 374413

bastelheini

Schriftsteller



Beiträge: 618
Wohnort: Sachsen

ich sagte ja....:"oder ne seite wo man übungsaufgaben hat und sich die lösung später angucken kann?"

mfg bastelheini


      Nächste Seite
Gehe zu Seite ( 1 | 2 | 3 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 6 Beiträge verfasst
© x sparkkelsputz        Besucher : 182394431   Heute : 1627    Gestern : 7548    Online : 452        25.11.2024    10:19
8 Besucher in den letzten 60 Sekunden        alle 7.50 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0791831016541