Forum: Mikrocontroller und Digitale Elektronik Anfängerproblem


von Sippo (Gast)


Angehängte Dateien:

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?

von Detlev T. (detlevt)


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;

von Sippo (Gast)


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

von spess53 (Gast)


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

von Sippo (Gast)


Lesenswert?

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

Mfg Sippo

von spess53 (Gast)


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

von Sippo (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

>oder zumindest eine Befehlsreferenz. Wäre dankbar wenn...

Die gibt es zum Beispiel in der Hilfe zum AVR-Studio und als PDF bei 
Atmel. Ausserdem in jedem Datenblatt als Kurzübersicht.

MfG Spess

von verwirrter (Gast)


Lesenswert?

> 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.

z.B. aus 'nem Datenblatt.

Datenblatt ATMEGA8, S.289, Instruction Set Summary

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.