Hallo zusammen,
ich programmiere schon sehr lange in freebasic, jedoch hab ich zu Bascom
ein paar Fragen.
Programmiert wir ein Atmega 8 Mikrocontroller.
Der genaue Typ ist atmega8a-pu.
Ich hab einen Code zur Ansteuerung des rfm12 Moduls gefunden, hab den
auch schon auf meine Bedürfnisse angepasst, jedoch erscheinen mir zwei
Sachen anderst im Gegensatz zu freebasic.
Diesen Teil meine ich nur:
dim data_in(10) as byte
dim text as string * 10
For N = 1 To 10
Wait_rfm12
D = &HB800 + Data_in(n) : Gosub Wert
Next N
der liest doch 10 Bytes in das array data_in ein.
wenn ich jetzt diese Daten in einen String packen will, dann sieht es
doch so aus oder?
text = ""
For N = 1 To 10
text = text + data_in(n)
Next N
Ist echt wichtig, da die Daten im String dann über die serielle
Schnittstelle zum PC übertragen werden.
Die nächste Frage wäre das Deklarieren des amtega8.
So steht es im Code:
$regfile = "m8def.dat"
$hwstack = 32
$swstack = 10
$framesize = 40
Passt das so?
Wäre echt nett, wenn mir jemand umgehend helfen könnte, da ich mit den
Lötarbeiten heute noch fertig werde.
Meine Programme sind außer auf die oben beschriebenen Probleme fertig
geschrieben.
Cu Andy
Dein Programm ist nicht vollständig, deshalb kann man das so pauschal
nicht beantworten. Du kannst es einfach mit dem eingebauten Simulator
testen. Da kannst Du das Wait_rfm überspringen und immer einen festen
Wert pro Schleifendurchlauf addieren, und dabei zusehen, wie sich Dein
String zusammenbaut und ob es so ist, wie Du es Dir vorstellst.
Oder frag präziser: welche Zeile im Quelltext versthest Du nicht?
danach steht im array da er immer ein Byte gespeichert hat:
data_in(1) = "A"
data_in(2) = "N"
data_in(3) = "D"
data_in(4) = "R"
data_in(5) = "E"
data_in(6) = "A"
data_in(7) = "S"
data_in(8) = "."
data_in(9) = "."
data_in(10) = "."
text = ""
For N = 1 To 10
text = text + data_in(n)
Next N
sieht dann der string text so aus?
text = "ANDREAS..."
Du hast den µC samt BASCOM am PC vor dir.
Was hindert dich daran, es einfach mal auszuprobieren wenn du dir schon
nicht die Mühe machen willst, das mit der BASCOM Doku abzuklären (die
zugegebenermassen in den Details ein wenig lückenhaft ist)
Du kennst den Input, du hast eine Hypothese was deiner Vorstellung nach
passieren müsste. Du hast eine Vorhersage wie das Ergebnis (wenn deine
Hypothese richtig ist) aussehen müsste.
Jetzt ist es an der Zeit, deine Hypothese einem Test zu unterziehen.
Sieht das Ergebnis so aus, wie du denkst das es müsste, oder tut es das
nicht? Welche Tests könntest du noch machen um mehr Vertrauen in deine
Hypothese zu bekommen? Denn seien wir mal ehrlich: ein einziger Tests
sagt jetzt nicht sooo wahnsinnig viel aus. Aber wenn du bei 10
unterschiedlichen Tests jedesmal das Endergebnis korrekt vorhersagen
kannst, dann könnte man schon sagen: den Teil dürftest du verstanden
haben.
data_in ist doch ein Byte und kein String. data_in(1) = "A" ist dann
doch falsch. richtig wäre z.b. data_in(1) = 43 oder so und dann passt
text = text + data_in(n) auch nicht mehr. du musst das byte in den
entsprechenden string wandeln (ASCI).....
For N = 1 To 10
Wait_rfm12
D = &HB800 + Data_in(n) : Gosub Wert
Next N
Da wird nix ins array geschrieben, sondern der Inhalt des Arrays soll
wohl zu einer Konstanten dazu addiert werden und einer Variable (D)
zugewiesen werden, danach wird eine Subroutine angesprungen (Wert), das
ganze dann 10 mal mit aufsteigendem N.
For N = 1 To 10
text = text + data_in(n)
Next N
Du hast eine Zeichenkette (String) und addierst ein Byte dazu?? Oder
willst Du n Zeichen anhängen?
Ist aber Käse das so zu machen, kostet Rechenzeit unnötig ... wobei, zum
Anfangen ists OK.
chr() ist dein Suchbegriff in der Bascom Help
dim data_in(11) as byte
dim text as string *10 at data_in overlay
data_in(1) = "A"
data_in(2) = "N"
data_in(3) = "D"
data_in(4) = "R"
data_in(5) = "E"
data_in(6) = "A"
data_in(7) = "S"
data_in(8) = "."
data_in(9) = "."
data_in(10) = "."
data_in(10) = 0
jetzt sieht text so aus:
text = "ANDREAS..."
Hi,
Mensch...klar..chr ()....
Umgekehrt wäre es ja asc()...
Also den Bascom Code habe ich jetzt zum Glück fertig.
Getestet hab ich es mit freebasic und dann in Bascom mit Abänderungen
übernommen.
Ich hab mir nun folgenden Adapter gelötet:
http://www.opendcc.de/elektronik/opendcc/avr_ponyprog_adapter_sch.jpg
Klar...die 1 kohm Widerstände erniedrigen die Spannung u. die Z-Diode
sorgt dafür, daß aus -12 v = 0 Volt werden "logische 0" und aus +12 V =
4,7 V werden "logische 1".
Es steht noch dabei, das man beim Proggen des Atmega folgende
Einstellung bei ponyprog machen muß:
http://www.opendcc.de/elektronik/opendcc/ponyprog_einstellung2.jpg
So...dann müßte ich doch nur noch sck,reset,miso,mosi mit dem atmega8
verbinden und den atmega8 an die versorgungsspannung anschließen oder?
Zur Spannungsversorgung:
Ist Pin 1 "rotes Kabel" von USB.
GND leite ich auf Pin 4 "schwares Kabel" von USB.
So...und noch ein 100 n Kondensator dazwischen für die
Spannungsversorgung vom Atmega...
Dürfte das reichen?
data_in(1) = "A"
doch, kann gehen, Bascom übersetzt so einzelne Zeichen je nach Funktion
in Bytes, man kann z.B. nen Bytewert bei if-then verwenden
if data_in(1) = "A" then ... macht Bascom, auch wenn einem die Haare zu
Berge stehen.
Eine eigene Frage?
Dieser Thread ist über 14 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.