Anfängerproblem

Gast #1071138
Lesenswert?

Hi,

ich habe ein kleines Problem, mit der Programmierung des ATMega8 und 
zwar geht es darum 2 Eingangssignale an PD7 und PD6 zu invertieren in 
jeweils 2 Signale aufzuteilen, jeweils ein Signal ein weiteres mal 
Invertieren und das Ergebnis dann an PB1, PB2, PB3, PB4 auszugeben. ich 
habe das ganze schon mit swap, xor, com usw. probiert, bekomme die 
Signale aber einfach nicht an die richtige Stelle. Es geht leider auch 
nicht mehr Die ein bzw. Ausgänge zu Ändern, da die Schaltung schon 
aufgebaut ist.

In der Logikvariante sähe die Schaltung in etwa so aus wie in der Datei 
im Anhang.

Den einen Inverter könnte man zwar weglassen aber ich glaub der hatte 
auch noch einen Nutzen aber zurück zum µC. Habt ihr mir da eine Lösung?
Angehängte Dateien:
#1071145
Lesenswert?

Du hast leider nicht geschrieben, in welcher Sprache du programmierst. 
C? Assembler? BASCOM.

Du könntest die Eingänge ja einfach mit "if" abfragen und die 
Ausgangspins entsprechend setzen. Das ist auf jeden Fall sehr flexibel.
1
uint8_t temp = PORTB & 0xe1;
2

3
if(bit_is_set(PIND, PD7)) temp |= _BV(PB2);
4
                     else temp |= _BV(PB1);
5
 
6

7
if(bit_is_set(PIND, PD6)) temp |= _BV(PB3);
8
                     else temp |= _BV(PB4);
9

10
PORTB = temp;
Gast #1071147
Lesenswert?

Oh mist stimmt Entschuldigung. Also zz programmiere ich µC in Assembler. 
Und da ist mir dummerweise noch kein if über den Weg gekommen :(. 
Normalerweise progge ich in Basic aber da kostet der Compiler ja was.

Mfg Sippo
Gast #1071171
Lesenswert?

Hi

Die einfachst Methode wäre über das T-Flag:

              in r16,PinD
              bst r16,7           ; Bit 7 nach T
              bld r16,0           ; T-Flag nach bit 0
              bld r16,1           ; TLag nach Bit 1
              bst r16,6           ; usw.
              bld r16,2
              bld r16,3
              andi r16,0b00001111 ; restliche Bits löschen
              ldi r17,0b00000101
              eor r16,r17         ; Bits invertieren
              out PortB,r16       ; ausgeben

MfG Spess
Gast #1071195
Lesenswert?

Hi

>Kann mir noch einer sagen in welchem Teildes Tuts das behandelt wird?

Ich kenne das Tutorial nicht, aber könnte mir aber vorstellen, das der 
Fall etwas zu speziell ist. Etwas Platz für Eigeninitiative muss ja auch 
noch sein.

MfG Spess
Gast #1071217
Lesenswert?

Schon aber ich meine es muss doch ein Tutorial geben in dem die Befehle 
beschrieben sind oder zumindest eine Befehlsreferenz. Wäre dankbar wenn 
da jemand was wüsste. Bzw. wo habt ihr das gelernt, wenn ihr es nicht 
aus der Ausbildung oder der Schule habt.

Mfg Sippo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren