Guten Tag,
seid Tagen versuch ich 8Bit Daten von einem Atmega8 zu einem anderen zu
schicken ich schick zu erst den zu Stand high oder low und etwas
zeitversetz kommt dann das Taktsignal sobald dann High auf dem Takt bin
anliegt wird der zustand von Bit 7 Bis Bit 0 nacheinander geschickt.
Das senden klappt auch nur das empfangen nicht so wirklich und ich weiß
nicht warum
PORTB,1 ist für Daten
PORTB,2 ist für den Takt
Die Spannung ist bei beiden gleich weil ich keinen Optokoppler hab
bei dem emfang Atmega hab ich beide eingänge über 1K auf masse gezogen
damit kein falscher zustand entsteht.
Pierre Gnauck schrieb:> Guten Tag,> seid Tagen versuch ich 8Bit Daten von einem Atmega8 zu einem anderen zu> schicken ich schick zu erst den zu Stand high oder low und etwas> zeitversetz kommt dann das Taktsignal sobald dann High auf dem Takt bin> anliegt wird der zustand von Bit 7 Bis Bit 0 nacheinander geschickt.
Aber doch hoffentlich, indem nach jedem Bit der Taktpin kurz auf 0 geht.
Dann wird das nächste Bit auf den Ausgang gesetzt und der Taktpin geht
wieder auf 1 um anzuzeigen, dass das Bit jetzt gültig ist.
>> Das senden klappt auch nur das empfangen nicht so wirklich und ich weiß> nicht warum>> PORTB,1 ist für Daten> PORTB,2 ist für den Takt
Vereinfache das doch mal.
Schleifen und Schiebebefehle sind schon lange erfunden.
Dein Code ist durch die schiere Länge extrem unübersichtlich. Das alles
kann man in weniger als 15 Zeilen Code ausdrücken (wenn man Schleifen
benutzt)
zählregister = 0
ergebnis = 0
Taktpin einlesen <-----+ <---------+
solange Taktpin gleich 0 ------+ |
|
Datenpin einlesen |
ergebnis um 1 Stelle nach links schieben |
Datenpin als Bit 0 hineinverodern |
|
Taktpin einlesen <------+ |
solange Taktpin gleich 1 -------+ |
|
zählregister inkrementieren |
ist es auf 8? nein -------------------------+
ja! fertig
Pierre Gnauck schrieb:> So wie die warteschleifen unten die ich mit dem Stack benutze quasi dann> auch das Lesen und schieben in solche schleifen reinpacken.
Mir sind ehrlich gesagt deine Warteschleifen schon nicht klar. Wenn du
das richtig machst (synchrone Übertragung) dann brauchst du keine
Warteschleifen, weil dir das Taktsignal sowieso sagt, wann das nächste
Bit am Dateneingang bereitsteht.
Ja schon richtig aber entweder ist nix passiert oder alle Led's waren
high
Deswegen hab ich das mit dem warten gemacht. weil ich dachte das
Sich Vill codezeilen überschneiden oder so Bon halt ein wenig baff
Weil ich schon dachte das der Code recht simpel sei von
Der Logik her
MfG bqube
Wie kann ich den einen wert Peer variable
Verändern.
Z.b
PORTD,1
PORTD,2 usw
Wollt ich so schreiben
.EQU PP=7
PORTD,PP
Wie kann ich nun den wert PP um eins verringern
So das PP=7 Net mehr 7 ist sondern 6 ?
MFG Bqube
Pierre Gnauck schrieb:> Wie kann ich den einen wert Peer variable> Verändern.
du hast den Wert in einem Register stehen.
Und du kannst ein Register zb inkementieren (INC) oder dekrementieren
(DEC).
>> Z.b> PORTD,1> PORTD,2 usw>> Wollt ich so schreiben> .EQU PP=7> PORTD,PP>> Wie kann ich nun den wert PP um eins verringern> So das PP=7 Net mehr 7 ist sondern 6 ?
OUT PORTD, r15
dec r15
Vielleicht mal ein paar Kapitel des
AVR-Tutorial
durcharbeiten. Das was du vorhast ist schon nicht mehr unbedingt
trivial. Da solltest du eigentlich die Basics in Assembler schon drauf
haben.