Anfängerproblem

Gast #1071138
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
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
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
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
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
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
Gast #1071223
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
Gast #1071225
> 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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.