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?
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; |
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
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
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
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
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.