Forum: Mikrocontroller und Digitale Elektronik Port in 2 Byte aufteilen-Rechenoperation ausführen-Auf anderem Port ausgeben(Binär)


von Robin W. (robo11)


Lesenswert?

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

von Troll (Gast)


Lesenswert?

Dezimal und Binär sind nur 2 verschiedene Darstellungen für die gleiche 
Zahl. Erklär mal genauer was du vorhast.

von Robin W. (robo11)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

out = (in >>4) + (in & 0xF )

von Robin W. (robo11)


Lesenswert?

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

von Robin W. (robo11)


Lesenswert?

Hier ist mein Basisprogramm!

1
#include <avr/io.h>         
2
 
3
int main (void) {            
4
 
5
   DDRB  = 0x00;                         
6
                          
7
 
8
   return 0;                 
9
}

von Troll (Gast)


Lesenswert?

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

von Robin W. (robo11)


Lesenswert?

Ja bin gerade erst von Bascom auf C umgestiegen!


Aber ohne µc programmiere ich Java!

von Troll (Gast)


Lesenswert?

Dann lerne erst C am PC und beschäftige dich dann mit µPs die in C 
programmiert werden wollen. So wird das jedenfalls nichts.

von Peter II (Gast)


Lesenswert?

Robin Wenert schrieb:
> Aber ohne µc programmiere ich Java!

in JAVA sieht es doch genauso aus.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

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"?

von egbert (Gast)


Lesenswert?

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.

von W.S. (Gast)


Lesenswert?

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.

von Robin W. (robo11)


Lesenswert?

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?

von troll (Gast)


Lesenswert?

>*  10
???

von Paul Baumann (Gast)


Lesenswert?

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

von Robin W. (robo11)


Lesenswert?

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
Noch kein Account? Hier anmelden.