Forum: Mikrocontroller und Digitale Elektronik Atmega -> Bascom -> array u. string


von andy (Gast)


Lesenswert?

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

von Rainer U. (r-u)


Lesenswert?

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?

von andy (Gast)


Lesenswert?

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..."

von Karl H. (kbuchegg)


Lesenswert?

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.

von herbert wener (Gast)


Lesenswert?

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).....

von Weingut P. (weinbauer)


Lesenswert?

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

von Weingut P. (weinbauer)


Lesenswert?

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..."

von andy (Gast)


Lesenswert?

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?

von Weingut P. (weinbauer)


Lesenswert?

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.

von andy (Gast)


Lesenswert?

besser gefragt....passt es so dann?

für was ist der reset pin notwendig?
zum signalisieren des flashen u. neustarten nachdem flashen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.