Forum: Mikrocontroller und Digitale Elektronik SHIFTOUT- Befehl in Bascom geht nicht


von Andi K. (aykay90)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Ich habe ein kleines Problem in Bascom und zwar mit dem SHIFTOUT- 
Befehl.
Mithilfe der Themensuche hier im Forum konnte ich nichts finden, was in 
Bascom geschrieben war, oder mein Problem beschreibt, desswegen hier ein 
neuer Eintrag.

Mein Ziel ist es von einem  ATtiny13 zu einem ATmega8 einen Bytestrom zu 
senden.
Dieser Bytestrom soll dann beim ATmega8 mithilfe der SHIFTIN- Funktion 
als Variable gespeichert werden und aufgrund dieser dann die 
entsprechende Sub- Routine aufrufen.

Aus der Hilfestellung von Bacom bin ich nicht wirklich schlau geworden 
und auch sonst habe ich im netz nichts gefunden was mir weiterhalf, 
desswegen frage ich jetzt euch, ob ihr mir helfen könnt.

Im Anhang habe ich mal ein Versuchscode reingepackt.
Was ich nicht ganz verstehe ist, in der Hilfestellung steht, dass ich 
bei diesem Befehl mit der Variable 4 irgendwo an 4. Stelle nach 
"SHIFTOUT" einen externen Takt verwenden kann, bzw. das habe ich gemacht 
mit der PWM- FUnktion, was anber dann auch nicht funktionierte :-(

Ich hoffe ihr habt eine Idee.
(Sorry, der Code ist etwas unübersichtlich, und am einen Pin, der 
getogglet wird ist eine Kontroll- Led angebacht)


Freundliche Grüsse
Andi

von peterfido (Gast)


Lesenswert?

Als Clock ist ein Port-Pin gemeint.

Im Prinzip läuft Shiftout so ab:

Es wird das gewünschte Hi/Lo Signal an PIN angelegt. Ist dieses stabil, 
wird Clock kurz getoggelt, dann das nächste Bit an PIN angelegt und 
wieder getoggelt usw. Steht auch alles in der Hilfe. Das Beispiel dazu 
findet sich unter SHIFTIN.

Bascom 2.0.6.2 und 2.0.6.3 haben ein Bit Problem. Also sicherstellen, 
dass du die neueste Version 2.0.7.0 nutzt(oder eine ältere als die 
gennanten)

von Andi K. (aykay90)


Lesenswert?

Also zuerst mal, bezieht sich dieses Bit Problem auch auf die Demo 
Version? Ich arbeite mit dieser Version von Bascom.

Was meinst du genau mit dem gewünschten Hi/ Lo Signal?
Ich habe den Eindruck dass du da gerade Shiftin beschreibst, da es dabei 
um das Einlesen geht.
Ich habe allerdings Probleme mit dem Auslesen.

von Peter D. (peda)


Lesenswert?

Andi K. schrieb:
> Mein Ziel ist es von einem  ATtiny13 zu einem ATmega8 einen Bytestrom zu
> senden.

Das geht so nicht. SHIFTOUT und SHIFTIN sind SW-SPI-Master.


Peter

von Bo G. (boge-ro)


Lesenswert?

Hallo Andi,

ich denke der Fehler liegt am Clock.
beim Shiftout erzeugst du die zu den Daten gehörige Clock....und 
toggelst damit den Pin. Du hast ihn jedoch als Eingang deklariert.

Gruß BoGe-Ro

von Andi K. (aykay90)


Lesenswert?

@Bodo - So, ich habe das Programm geändert und es tat sich noch immer 
nichts. Ich denke dass das an der Sache liegt, die Peter erwähnt hat.

@Peter - was bedeutet das genau? bzw, gibt es eine andere Möglichkeit 
eine Kommunikation dieser art herzustellen? Evt. mit I2C oder so?

Gruss Andi

von MWS (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Das geht so nicht. SHIFTOUT und SHIFTIN sind SW-SPI-Master.

Das ist nicht richtig. Mit Parameter +4 wird externer Clock akzeptiert.
1
  Shiftin Ser_In , Clock_In , B , 4 , 8

von MWS (Gast)


Lesenswert?

Nachtrag:

Da Beschreibung und Funktion von Shiftin mit ext. Clock abweicht, dürfte 
Folgendes zusammenpassen:

Sender:
1
Clock_Out Alias PortX.0
2
Ser_Out Alias PortX.1
3
  Shiftout Ser_Out , Clock_Out , B , 0
Empfänger:
1
Clock_In Alias PinX.0
2
Ser_In Alias PinX.1
3
  Shiftin Ser_In , Clock_In , B , 5     ' <-- samples at falling ext clock

von Andi K. (aykay90)


Angehängte Dateien:

Lesenswert?

Ok, ich habe mal das Programm von MWS nachgeschrieben und ausprobiert.
Ich bin mir nicht sicher ob das nur geht wenn zum Sender auch ein
Empfänger vorhanden ist, ich habe es einfach mal mit dem Oszilloskop
gemessen und da hat sich nicht viel getan.

Im Anhang habe ich das aktuelle Programm und dazu noch ein Screenshot
vom Oszi.
Darauf ist zu sehen dass ich vor dem Shiftout eine stegende Flanke habe,
die 100ms lang ist, dannach sieht man die gelbe Flanke, welche zumindest
einen Teil des Shiftout Befehls ist und gleich 100ms später wie die
blaue Flanke wieder abfällt.

Ich wollte somit schauen was diese eine Zeile macht und habe sie
desswegen so "begrentz".

Was meint ihr nun dazu?

von MWS (Gast)


Lesenswert?

Andi K. schrieb:
> Ich bin mir nicht sicher ob das nur geht wenn zum Sender auch ein
> Empfänger vorhanden ist,

Da gibt's keine weitere "Eigenintelligenz", es werden einfach nur die 
Bits rausgetaktet und dazu der Clock erzeugt.

Wüsste auch nicht, was Du mit 'nem Raster von 200ms sehen willst, wenn 
das Rausschieben knapp 17µs dauert. Da kannst Du auf dem Oszi noch gar 
nichts erkennen.

Mit dem Parameter "delay" lässt sich die Sache verlangsamen.

von Andi K. (aykay90)


Lesenswert?

Achso gut, das war auch eine Frage die ich mir gestellt habe, wie lange 
dieser Prozes dauert. dn werde ich heute Abend mir dasnochmal anschauen.
Aber wieso ist der Ausgag nach dem Vorgang auf High und nicht auf Low?


Andi

von MWS (Gast)


Lesenswert?

Andi K. schrieb:
> Aber wieso ist der Ausgag nach dem Vorgang auf High und nicht auf Low?

Wenn Shiftout() mit Option 0 = "MSB shifted out first when clock goes 
low" konfiguriert ist, wie sollte es denn sonst den ersten Takt 
ausgeben, wenn Clock vorher nicht High ist ?

Die .cfg musst Du im Übrigen nicht mitposten.

von Andi K. (aykay90)


Lesenswert?

Heisst das aso, dass das was ich auf dem Oszi habe nur der erste Takt 
ist? und kann ich irgendwo diese Clock an einem Pin abgreifen damit ich 
überhaupt mal sehen kann wie das Ganze taktet? ich finde die 
Beschreibung dazu in des Bascom- Hilfe zimlich mager.

von MWS (Gast)


Lesenswert?

Andi K. schrieb:
> Heisst das aso, dass das was ich auf dem Oszi habe nur der erste Takt
> ist?

Ob erster oder letzter Takt is egal, Du kannst nichts davon erkennen, da 
200ms/div viel zu lang ist. Setzt das Shiftout() in 'ne Do/Loop, mach' 
meinetwegen noch ein Waitms dazu, laß den anderen sbi/cbi Kram weg.
Laß laufen und triggere auf fallende Flanke. Div sollte um die 2-5µs 
eingestellt sein.

Andi K. schrieb:
> ich finde die
> Beschreibung dazu in des Bascom- Hilfe zimlich mager.

Die ist mehr als ausreichend. Das Prinzip erklärt sie nicht, sollte man 
aber schon selbst wissen, und sonst steht alles da, z.B.:
"When the clock is too fast you can specify a delay time(in uS)."

von Andi K. (aykay90)


Angehängte Dateien:

Lesenswert?

So, nun hats endlich funktioniert! :D Zumindest kann ich jetzt mal einen 
Bitstrom senden.
Im Anhang seht ihr dazu nochmals ein Screenshot von meinem Oszi.

Wie genau läuft das jetzt mit dem Empfangen ab? Den Code dazu kenn ich 
jetzt ja auch schon, allerdings weiss ich nicht wie ich das handhaben 
muss.
wird beim Empfangen des Codes ein Interrupt ausgelöst, oder muss ich im 
Programm explizit auf das Clock- Signal warten? Ich bin mir zu 80% 
sicher bei der Sache mit dem Interrupt, alles Andere macht meiner 
Meinung nach nicht gerade viel Sinn.

Andi


PS: Kleines Rätsel: Was für einen Code sende ich? ;-)

von svenh (Gast)


Angehängte Dateien:

Lesenswert?

hallo liebe Forengemeinde ,
hallo Andi ,

ich kämpfe zur zeit am selben problem ...
mein ziel ist es , daten zwischen 2 AVR , mit shiftout / in 
auszutauschen .
@Andi
auf deinem Bild erkennt man das clock signal am kanal 1 und die daten 
auf
kanal 2 , mir kommt aber der flicker in deiner datenleitung kurz vor dem
1. clock etwas komisch vor ?
hast du da einen wackler in der leitung ?
welchen delay wert verwendest du?

ich sende im Augenblick bei 8MHz Quarz mit einem delaywert von 100 , es 
geht auch mit 10 , aber zu testzwecken erkennt man es so besser auf dem 
Oszi.

Bei meinem Shiftin kommen die daten zwar an , aber ich muß sie mit
Shift wert , Right , 1 erst "richten" also in die richtige reihenfolge 
bringen !?
hat dafür jemand eine erklärung ?

der Code ist im Anhang

wie gesagt , so funktioniert es , aber das die daten "verdreht" sind ist 
ja nicht korrekt.
wäre schön wenn jemand eine idee hat.

Danke
Sven

von svenh (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ,
ich habe soeben gemerkt das ich den shiftin code vergessen habe.
der kommt nun hier.

Sven

hier könnt ihr mal auf meiner bastel HP vorbeischaun ...
www.svens-projekte.de

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.