Forum: Mikrocontroller und Digitale Elektronik Schieberegister 74hc164 an Atmega16


von Thomas G. (escape)


Angehängte Dateien:

Lesenswert?

Hallo Community,
ich habe mir nach und nach einen Atmega16 @ 16Mhz Board mit 
Serialverbindung aufgebaut. Nun möchte ich gern nachdem alles super 
klappte mein Board um ein oder zwei Schieberegister erweitern.


Ich habe das Schieberegister nach folgender Schaltung angeschlossen.
(siehe Ahnhang)

Ich nutze folgenden Code.
1
$regfile "m16def.dat"
2
$crystal = 16000000
3
4
Dim Reg As Byte
5
Dim Save As Byte
6
Dim Outbit As Boolean
7
Dim Cnt As Byte
8
9
Config Portb.0 = Output
10
Config Portb.1 = Output
11
Config Portb.2 = Output
12
13
Portb.1 = 0
14
15
Do
16
  Save = Reg : Portb.0 = 0 : Portb.0 = 1
17
  For Cnt = 1 To 4
18
    Outbit = Save And 1 : Portb.2 = Outbit
19
    Portb.1 = 1 : Portb.1 = 0
20
    Shift Save , Right
21
  Next Cnt
22
  Incr Reg : Waitms 200
23
Loop


Diese Schaltung funktioniert nur solang ich ich keine Stromversorgung 
anschliesse am(74hc164). Sobald ich an PIN7 Gnd und PIN14 +5V gebe 
schaltet sich alles Stumm. Die Leds blinken nichtmehr.

Atmega16
Anschluss PB0 an Clock @ 74HC164
Anschluss PB1 an Clear @ 74HC164
Anschluss PB2 an Serial Input A @ 74HC164

GND und Plus (vorerst abgeklemmt)


LED1 an PIN3 @ 74HC164
LED2 an PIN4 @ 74HC164

Der Bascom Code wird ausgeführt allerdings ohne die Stromversorgung am 
Schieberegister. Habe ich etwas übersehen was mache ich verkehrt?

Edit:
Im Anhang an PIN 1&2 @ 74HC164 ist PB0 und PB1 beschriftet das stimmt 
natürlich nicht.

Gruß Thomas

von kolabier (Gast)


Lesenswert?

Shiftregister ohne Stromversorgung, vor allem ohne GND soll 
funktionieren?
Da fresse ich ja eine Besenfabrik.

Falls du es nicht bereits dadurch bereits gebraten hast, versuche mal 
Pin 2 auf high zu legen.

Ich kenne die Programmiersprache, die du benutzt nicht, aber mir sieht 
es so aus, als ob die Variable Reg gar nicht initialisiert ist.

Ausserdem scheint mir CLOCK und CLEAR in deinem Code vertauscht.

von The_ride (Gast)


Lesenswert?


von Thomas G. (escape)


Lesenswert?

Ja genau danach habe ich gearbeitet :)

Lege ich Pin2 auf High leuchtet die LED heller aber beim low setzten 
kommt trotzdem Strom an. Verdammt nochmal ich mach aber auch alles 
falsch :(

Kann mir jemand sagen BITTE wie der richtig beschaltet wird oder hat 
jemand eine Schaltung wie ich den an einen Atmega16 richtig anschliesse?

Ich habe noch einen einzigen Baustein :( wenn da auch nen kurzer kommt 
liegt Ostern hier alles brach. Es wäre nett wenn mir jemand solch einen 
Schaltplan zeigen könnte. Oder sagen kann was wie wo angeschlossen wird.

Danke und Gruß
Frohes Osterfest :)
Thomas

von kolabier (Gast)


Lesenswert?

Liest du eigentlich auch die Beiträge, die man auf deine Frage schreibt?

Wie gesagt, du hast in deinem Code Clock und Clear vertauscht.
Aussdem würde ich den Clear low-cycle und den Clock high-cycle 
sicherheitshalber so machen:

(...)
Portb.0 = 0
Waitms 1
Portb.0 = 1
(...)
Portb.1 = 1
Waitms 1
Portb.1 = 0
(...)

Und ohne GND und VCC funktioniert es überhaupt nicht.

von kolabier (Gast)


Lesenswert?

Und die Vorwiderstände an den LEDs nicht vergessen. Wenn du die 
vergessen hast, dann ist dein Schieberegister vermutlich sowieso hin.

von Der Michel (Gast)


Lesenswert?

kolabier schrieb:
> Portb.1 = 1
> Waitms 1
> Portb.1 = 0

Der 74HC164 soll mit 30 MHz klarkommen. Warum sollte der ein Wait 
brauchen?

von kolabier (Gast)


Lesenswert?

Der Michel schrieb:
> Der 74HC164 soll mit 30 MHz klarkommen. Warum sollte der ein Wait
> brauchen?

Ja stimmt. Bei 5V sogar mit mehr als 40MHz. Hatte überlesen, dass der 
Prozessor nur mit 16 MHz läuft. Geht also auch ohne Waits.

von Thomas G. (escape)


Angehängte Dateien:

Lesenswert?

So ich habe es hinbekommen.

Die Belegung ist total anders das doofe ist das er in der Anleitung 
einfach "da" schreibt das überliesst man da es an dieser Stelle auch das 
WORT da bedeuten kann.

Also alles läuft nun :)

Anbei die Beschaltung wie sie richtig ist.



Gruß Thomas

von kolabier (Gast)


Lesenswert?

Ich nur Bahnhof verstehen.
Welche Anleitung? Wer ist "er"? Wo ist "da?"

Die Belegung ist nicht total anders, sondern du hast den 2. Input jetzt 
korrekterweise auf 1 gesetzt, das ist das einzige was "richtiger" ist.
Jetzt hast du eben andere Ports an deinem Atmel benutzt.

Ich denke das Problem war nach wie vor hauptsächlich in deinem Code zu 
suchen, offenbar hast du jetzt im Code die Clock- und Clear Leitungen 
richtig angesteuert.

Gratulation.

von Thomas G. (escape)


Lesenswert?

Den Reset-Eingang (MR=Master Reset) des Schieberegisters wird an Port D 
Bit 0 angeschlossen. Schieberegister benötigen noch ein Taktsignal, 
welches hier CP genannt wurde, dieses hängt an Bit 1 des Ports D.
1
Der 74HC164 besitzt 2 Dateneingänge, welche aber durch eine Und-Funktion miteinander verknüpft sind, so dass wir nur Da an Port D Bit 2 des AVR klemmen.
 Db wird dauerhaft an + gelegt.

da an Port zwei ,...

Ich habe das falsch gelesen unabhängig davon ob er das Groß oder klein 
schreibt! Am Ende war es mein Fehler aber nen bischen kenntlicher hätte
es an dieser Stelle schon formuliert werden können ;)

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.