Forum: Mikrocontroller und Digitale Elektronik Arrays in FastAVR deklarieren und benutzen


von Benjamin (Gast)


Lesenswert?

Hallo,

wie kann ich ein eindimensionales Array mit 8 Elementen in FastAVR 
deklarieren und benutzen?


Danke!

von emil (Gast)


Lesenswert?

ganz einfach, z.b:

....
dim n(10) as byte, i as byte 'n ist massiv aus 10 ellementen..

for i= 0 to 9
n(i)=i '  n(1)=0, n(2)=1 usw...
next i
....

ist ähnlich wie bascom, ganz bequem

von A. Arndt (Gast)


Lesenswert?

@Benjamin,

lass uns doch mal austauschen bezüglich FASTAVR, ich habe noch nicht 
viele User gefunden...

Gruss
A. Arndt

von Benjamin (Gast)


Lesenswert?

Was meinst du mit austauschen? Ich halte sehr viel von FastAVR, da er 
nahezu 1:1 den Basic Quellcode in Maschinensprache umsetzt. Der Support 
ist auch ausgezeichnet, leider fehlt mir eine deutsche Hilfedatei, so 
dass ich den Author schon x-mal irgend welche Dinge Fragen musste. (Ich 
hoffe, dass ich ihm noch nicht auf die Nerven gehe!)

Weiß du (oder irgend wer anders), wie man einen 8-Zeichen String in 8 
Arrays speichert (jedes Zeichen ein Array).

Bsp: 11011011

n(0) = 1
n(1) = 1
n(2) = 0
n(3) = 1
n(4) = 1
n(5) = 0
n(6) = 1
n(7) = 1

von A. Arndt (Gast)


Lesenswert?

Hallo,

soweit bim ich noch nicht fortgeschritten, hoffe aber auch auf deutsche 
Anleitung für FASTAVR...

Gruss
A. Arndt

von Benjamin (Gast)


Lesenswert?

Wie weit bist du denn? Mein Atmel macht neuerdings komische Sachen: Seit 
ich den SChieberegister an PortB angeschlossen habe, gibt er bei 
laufenden PC ein korrektes Programm aus. Wenn ich den ISP abzeihe, 
leuchtet eine Led falsch!

von A. Arndt (Gast)


Lesenswert?

Hallo,

I/O-Grundlagen, uart, lcd und ds1820, i2c und eigene Board (siehe 
www.ar-Online.de).

Folgt jetzt gerade RS-485-Anbindung, Timer, Interrupts, DCF-77-Decoding

Gruss
A. Arndt

von emil (Gast)


Lesenswert?

nun ihr beide fastavr "user", was ist so schwer dran, steht alles doch 
in manual...:(

@benjamin: hier noch einmal:
....
dim bsp as byte
dim n(8) as byte
dim i as byte
....
bsp= 11011011

do
'--blabla--
...
for i=0 to 7
n(i)=bsp.i
next i
...
'--blabla--
...
loop

ist es wirklich so schwer, die doku aufzuschlagen um sich selbst zu 
bedienen? wer kein englisch kann, hat nichts beim tema mc verloren, 
oder? wer kein basic kann, sowieso...

von emil (Gast)


Lesenswert?

PS: in dem fall kannst du natürlich

dim n(8) as bit

statt dim n(8) as byte anwenden, falls du nur mit 1 und 0 arbeitest...

von Bernd (Gast)


Lesenswert?

Hallo,

es gibt aber auch Leute, die auch noch etwas anderes zu tun haben, als 
sich irgendwelche englische Doku durchzuackern, die einfach mal ganz 
klein anfangen wollen.

Die ganzen Informationen, die hier angefragt werden, kann man immer 
irgendwo durchlesen, also wozu die Foren ?

Richtig, damit man sich schnell austauschen kann, die Schlauen helfen 
den "Dummies" und werden dann auch zu Schlauen und helfen dann wieder 
"Dummies" usw. und usw.

Also bitte nicht so patzig und agressiv...

P.S. Es klingt härter als es gemeint ist...

von emil (Gast)


Lesenswert?

ok, hast natürlich recht, bitte um verzeihung; hoffe dass das beispiel 
hilft, alternativ kannst du dir auch bascom anschauen, die demo geht bis 
2k, was eigentlich (fast immer) mehr als beim fastavr ist; habe 
irgendvie das gefühl, das bascom auch besser dokumentiert ist und man 
sich viel schneller einarbeiten kann; habe schon ziemlich komplizierte 
sachen mit lcds, leds, tasten usw damit schnell fertig gemacht;

von Benjamin (Gast)


Lesenswert?

Bascom bläht aber den Maschinencode zu stark auf -> Viele unnötige Dinge 
stehen dort drin.

von Benjamin (Gast)


Lesenswert?

Ich muss euch leider sagen, dass das Programm sogar so:


'''''''''''''''''''''''''''''''

Dim cnt1 As Byte, cnt2 As Byte
Dim bsp As Byte
Dim n(8) As Byte
Dim i As Byte

DDRD = &HFF
DDRB = &HFF


Do
bsp = 11011011



  n(0)=bsp.0
  n(1)=bsp.1
  n(2)=bsp.2
  n(3)=bsp.3
  n(4)=bsp.4
  n(5)=bsp.5
  n(6)=bsp.6
  n(7)=bsp.7

  For cnt1 = 0 To 8
    PORTB = 8  '8 = Clock
    PORTB = 0  '4 = Data
  Next

  Wait 2

  For cnt1 = 0 To 7
    If n(cnt1) = 1 Then
      PORTB = 12  '8 = Clock
      PORTB = 4  '4 = Data
    Else
      PORTB = 8  '8 = Clock
      PORTB = 0  '4 = Data
    End If
  Next

  Wait 1
Loop

''''''''''''''''''''''

nicht funktioniert, da das hier angezeigt wird: 11000011?

es handelt sich um ein Schieberegister, das mit Daten "beschoben" wird. 
Wie ginge das Ganze mit der Funktion set?

von Benjamin (Gast)


Lesenswert?

Ok, das geht jetzt, aber warum funktioniert das nicht?

Dim cnt1 As Byte, cnt2 As Byte
Dim bsp As Byte
Dim n(8) As Byte
Dim i As Byte

DDRB = &HFF


Do


  n(0)=PORTD.0
  n(1)=PORTD.1
  n(2)=PORTD.2
  n(3)=PORTD.3
  n(4)=PORTD.4
  n(5)=PORTD.5
  n(6)=PORTD.6
  n(7)=PORTD.7


  For cnt1 = 0 To 7
    If n(cnt1) = 1 Then
      PORTB = 12  '8 = Clock
      PORTB = 4  '4 = Data
    Else
      PORTB = 8  '8 = Clock
      PORTB = 0  '4 = Data
    End If
  Next cnt1

  Wait 2

PORTB = 8  '8 = Clock
PORTB = 0  '4 = Data
PORTB = 8  '8 = Clock
PORTB = 0  '4 = Data
PORTB = 8  '8 = Clock
PORTB = 0  '4 = Data
PORTB = 8  '8 = Clock
PORTB = 0  '4 = Data
PORTB = 8  '8 = Clock
PORTB = 0  '4 = Data
PORTB = 8  '8 = Clock
PORTB = 0  '4 = Data
PORTB = 8  '8 = Clock
PORTB = 0  '4 = Data
PORTB = 12  '8 = Clock
PORTB = 4  '4 = Data
Wait 1
Loop

von emil (Gast)


Lesenswert?

also hatte ich doch recht :))))
englisch (ausländisch) lernen und manual GUT und FLEISSIG durchlesen, 
das hilft dann, mein sohn!!!
eine frage: was würde denn passieren, wenn jeder hier seinen code 2x 
postet? einige haben nicht 20 (wie du), sondern 2000 zeilen code...
sorry, bei dir erübrigt sich jeder hinweis von sich selbst...trotzdem:
dein fehler ist doch offensichtlich; hinweis-studiere mal den 
unterschied zwischen pin- und portregister

von Benjamin (Gast)


Lesenswert?

Ja, du hast im Prinzip Recht, aber ich bin halt noch ein Anfänger und da 
ich aus anderen Programmierforen kenne, dass man möglichst den ganzen 
Quellcode posten soll, anstatt nur einige Passagen, habe ich das hier 
auch gemacht.

von Benjamin (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist eine Schaltung, die ich zum Test bebaut habe: Oben der ISP 
Anschluss, Rechts ein Schieberegister mit LEDs an den Ausgängen, an PinD 
der Parallelport des PCs.

Folgendes Problem tritt auf: Wenn ich den ISP bei laufendem PC 
angeschlossen habe und ich per Software über den LPT Port z.B. 16 sende 
(Binär, also 00001000), dann leuchten eben so die Leds (00001000). Das 
ist ja auch noch ok, aber wenn ich den ISP abziehe, leuchtet (selbst 
wenn ich 0 sende), die 128er Led und wenn ich nun wieder meine 16 sende 
entsteht folgendes Muster: 00011001, bei 8: 00110001, bei 32: 00001101, 
usw. Was ist hier das Problem?

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.