www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schieberegister will nicht


Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe mir ein board gebaut, auf dem 4 mal 74hc165 und 4 mal
74hc595 zur porterweiterung sitzen. Die anschlüße zum AVR sind folgende
:
Pind.0 = clock input (hc595)
Pind.1 = storage clock input (hc595)
Pind.2 = Data input (hc595

Pind.3 = clock input (hc165)
Pind.4 = parallel load input (165)
Pind.5 = output (165)

Der Code ist :
.
.
Config Portd = &B11101111
Do
Portd.4 = 0
Portd.4 = 1
Portd.3 = 0
Portd.3 = 1
Temp = Pind.5
Locate 1 , 1
Lcd Temp
Waitms 200
Loop

Ich beckomme keine Werte eingelesen. Die Variable Temp bleibt immer
null. Wo hab ich einen Fehler gemacht ?

Danke !!!

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal den Befehl an:

SHIFTIN pin , pclock , var , option [, bits , delay ]

Damit kannst du wunderbar den Inhalt in eine Variable einlesen.
So wie du das machst, kannst du immer nur einen Zustand anzeigen der
immer alle 200ms wechselt!!

Das equivalent dazu wäre SHIFTOUT, zum Ausgeben auf einem
Schieberegister.

Grüße
Addy

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich auch schon versucht. Ich komme nur mit den parametern nicht
klar.
Müßte es so gesetzt werden :

Shiftin Pind.5 , Pind.3 , temp

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja schon, da fehlen aber noch die Auslesebedingung und Optional die
Anzahl der Bits, bzw ein Waitstate zwischen den Abfragen.

SHIFTIN Pind.5 , Pind.3 , temp , 0 , 8
                                 |   |
                 Je nach Register+   |
                Bei 8Bit-Register = 8+

Musst im Datenblatt nachguggen, bei Welcher Flanke die Daten anliegen.

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, es gibt im Samples-Ordner noch ein Beispiel, das nennt sich
shift.bas. Ansonsten findest du eigentlich die Beschreibung ausführlich
in der Hilfe. Schreib doch kurz dazu wo es genau hängt, und welche
Parameter du nicht verstehst.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe nun folgendes in meinem Code stehen.

Config Portd = &B11011111
Do
Shiftin Pind.5 , Portd.3 , Temp , 3 , 8 , 10
Locate 1 , 1
Lcd Temp
Loop

Ich beckomme nur eine 255 angezeigt. Ist die Port Config richtig ?

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, es sind 4 schiebregister 74hc165 hintereinander geschaltet.

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch

Config Portd.5 = Input , da du oben schon um eins verrutscht bist.

Wenn du 4 Hintereinandergeschaltet hast, dann musst du doch 8*4 Bits
einlesen. Ich tippe jetzt eher auf einen Schaltungsfehler. Wie hast du
die Register angeschlossen, gibts einen Schaltplan?

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich Config Portd.5 = Input setze, beckomme ich beim Compelieren
eine Fehlermeldung : Can´t find HW-register (DDR5).
Die Schaltung habe ich auch schon nachgesehen. Sie stammt von der Seite
: www.ucapps.de      unter MB Hardware/DIn Module

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, es ist schon spät ;-)

Config PINB.5 = Input

Gute Nacht ;-)

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja was mir jetzt noch aufgefallen ist, du hast im letzten Quelltext
die Latchclock nicht benutzt, das heisst die Eingangswerte ins Register
musst du schon noch vorher übernehmen.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie mach ich das denn ???

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juhu, so läuft es ..........Habe die Variable Temp1+2 als Word
definiert. Ich frage jeweils 2 74hc165 (16bit) ab.


Config Portd = &B11011111
Do
Portd.4 = 0
Portd.4 = 1
Shiftin Pind.5 , Portd.3 , Temp1 , 2 , 16 , 10
Shiftin Pind.5 , Portd.3 , Temp2 , 2 , 16 , 10
Rotate Temp1 , Left , 8
Rotate Temp2 , Left , 8
Locate 1 , 1
Lcd Bin(temp1)
Locate 2 , 1
Lcd Bin(temp2)
Loop

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, das geht auch in einem rutsch mit den 32, einfach als LONG
definieren, dann passt auch die 32 Bit rein.

Aber schön zu hören das der Grundstein funktioniert.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, und danke für die unterstützung!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.