Hallo, ich möchte einen kleinen Hardware Taschenrechner (später evtl. auch mini CPU) mit einem ATmega32 bauen. Die Programmiersprache soll C sein! Hat jemand eine Idee wie ich einen Port des ATmegas in 2 Byte jeweils 4 Bit aufteilen kann und evtl. diese zusammenrechnen und an einem anderen Port in 4 Bit wieder ausgeben? Wenn es nicht anders geht, müsste ich die Zahlen zuerst in Dezimal umwandeln, rechnen und wieder in Binär umwandeln! Mit freundlichen Grüßen Robin Wenert
Dezimal und Binär sind nur 2 verschiedene Darstellungen für die gleiche Zahl. Erklär mal genauer was du vorhast.
Also ich möchte einen PORT als 2 BCD eingänge verwenden (z.B. PORTC.0 PORTC.1 PORTC.2 PORTC.3 PORTC.4 PORTC.5 PORTC.6 PORTC.7 8 4 2 1 8 4 2 1 ___________________________ __________________________ INPUT 1 INPUT 2 INPUT 1 + INPUT 2 = OUTPUT z.B. PORTD.0 PORTD.1 PORTD.2 PORTD.3 8 4 2 1 ________________________ OUTPUT Beispiel: 8 4 2 1 INPUT 1: 0 1 0 1 INPUT 2: 0 0 1 0 ++++++++ OUTPUT : 0 1 1 1
out = (in >>4) + (in & 0xF )
OK ich weiß zwar nicht wie das funktioniert aber ich werde es testen! Wie kann ich die IN auf die Eingänge legen? Vielen Dank schonmal!!!
Hier ist mein Basisprogramm!
1 | #include <avr/io.h> |
2 | |
3 | int main (void) { |
4 | |
5 | DDRB = 0x00; |
6 | |
7 | |
8 | return 0; |
9 | }
|
Robin Wenert schrieb: > OK ich weiß zwar nicht wie das funktioniert Dann solltest du dich dringend mit den Grundlagen von C und µPs beschäftigen...
Ja bin gerade erst von Bascom auf C umgestiegen! Aber ohne µc programmiere ich Java!
Dann lerne erst C am PC und beschäftige dich dann mit µPs die in C programmiert werden wollen. So wird das jedenfalls nichts.
Robin Wenert schrieb: > (z.B. PORTC.0 PORTC.1 PORTC.2 PORTC.3 PORTC.4 PORTC.5 PORTC.6 > PORTC.7 > 8 4 2 1 8 4 2 > 1 ich kenne eher die "gespiegelte" Schreibweise, d.h. das niederwertigste Bit ist ganz rechts (PORTC.0), und das höchstwertigste ist ganz links (PortC.7) Ist das in Bascom "anders rum"?
Wegstaben Verbuchsler schrieb: > Robin Wenert schrieb: >> (z.B. PORTC.0 PORTC.1 PORTC.2 PORTC.3 PORTC.4 PORTC.5 PORTC.6 >> PORTC.7 >> 8 4 2 1 8 4 2 >> 1 > > ich kenne eher die "gespiegelte" Schreibweise, d.h. das niederwertigste > Bit ist ganz rechts (PORTC.0), und das höchstwertigste ist ganz links > (PortC.7) > > Ist das in Bascom "anders rum"? Nein. Der TS kennt sich offensichtlich nicht nur mit "C" nicht aus.
Robin Wenert schrieb: > ich möchte einen kleinen Hardware Taschenrechner (später evtl. auch mini > CPU) mit einem ATmega32 bauen. > > Die Programmiersprache soll C sein! Ah, ja. Du willst einen kleinen Taschenrechner basteln, hast aber bislang keinerlei Plan, wie man sowas macht, aber du weißt schon felsenfest, daß es mit einem ATmega32 und in C sein soll. Klasse, solche genialen Entwickler braucht das Land. Mein Rat: Lerne erstmal, wie man Tasten richtig abfragt, dann wie man ein Display ansteuert und dann, was man an Datenformaten braucht, um die bei Taschenrechnern übliche Stellenanzahl von 8..10 gültigen Stellen nebst Exponent im Bereich -99 bis +99 bieten zu können. Und dann sieh dich nach einem Controller um, dessen Toolchain die benötigten Datenformate realisieren kann. Bei vielen Implementationen wird nämlich stillschweigend single anstelle double verwendet und man wundert sich, daß ab der 6. Ziffer nur noch Müll herauskommt. SO! W.S.
OK! MEIN BCD-Code stimmt ganz sicher! Ich hab noch eine Frage:
1 | |
2 | |
3 | config.PortA = Input |
4 | config.PortB = Output |
5 | |
6 | BCDI1 = (PORTA & 0b00001111) |
7 | BCDI2 = (PORTA & 0b11110000)>>4 * 10 |
8 | |
9 | PORTB = BCDI1 + BCDI2 |
Würde das so funktionieren?
Soviel ich weiß, gibt es in C keinen Config-Befehl. Mach es doch erst mal in Bascom, bevor Du auf C umsteigst. Ich denke, daß es einfacher ist, dann einen funktionierenden Algorithmus in die neue Sprache zu übersetzen, als 2 Stolpersteine zu haben: Kein Algorithmus und keine Kenntnis der Syntax der neuen Sprache. MfG Paul
Ja Sorry, ich habe vergessen zu schreiben, dass ich mit Bascom weitermache!
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.