Ports konfigurieren, einlesen und an weitere Ports weiterleiten

OP (Firma: fhkshfkshd) #2871447
Lesenswert?

hallo, ich hab folgende aufgabe, die ich wie folgt gelöst habe:
1
//Funktion für manuelle Ansteuerung
2
/*durch Schiebeschalter eingestellte Bit-Wert soll auf R-2R-Netzwerk 
3
  umleiten
4
  Bit-Wert soll auch an Leuchtdioden zur Überprüfung 
5
*/
6
void manuell(void){
7
  
8
  int bitWert;
9

10
  DDRD  = 0b00000000;    
11
  PORTD = 0b11111111;    
12
  
13
  DDRA  = 0b11111111;    
14
  PORTA = 0b00000000;    
15

16
  DDRB  = 0b11111111;    
17
  PORTB = 0b00000000;    
18
  
19
  printf("Geben Sie den Bit Wert in dezimal ein: ");
20
  scanf("%d", &bitWert);
21

22
  PIND =  bitWert;


hallo, also meine aufgabe war, Port D als Eingang sowie PortA(LEDs) und 
PortB(R-2R-Netzwerk) als Ausgänge zu konfigurieren. Ich bin ein 
kompletter anfänger, was Microcontroller angeht, und habs versucht, das 
Ganze in C zu programmieren.
mit dem DDR-Register habe ich die Eingabe- und Ausgabepins festgelegt. 
Da PortD als Eingang gedacht ist, habe ich alle Pins im DDR-Register auf 
0 gestellt und die Pullabstände im PortD aktiviert.
Analog zu PortA und PortB habe ich die Pins auf 1 gelegt, also als 
Ausgabepins festgelegt, und danach die Pull-up-Widerstände im PortA und 
PortB deaktiviert.
Danach sollte ich mithilfe von PortD ein Bit-Wert einlesen und ihn dann 
an PortA und PortB weiterleiten.
da ich nicht weiterwusste habe ich angegeben, dass man den Bit-Wert als 
int-wert schreiben kann, aber die Register dürfen ja nur mit 
Hexidezimalzahlen oder binärzahlen belegt. keine ahnung wie ich das 
machen soll. kann mir da jmd. weiterhelfen?
#2871497
Lesenswert?

kjahkahfa jskdhfks schrieb:
> mir war nur nicht ganz
> klar, wie man hexadezimal-werte einliest...
Mit 0x....
>
> microcontroller ist ATmega644...
> und in der aufgabenstellung nichts über high oder low..keine ahnung, was
> damit gemeint ist...

Active high heißt, dass die LED leuchtet, wenn der Pin eine logische 1 
(also 5V) hat. Active low heiß, dass die LED leuchtet, wenn der Pin eine 
logische 0 (also 0V) hat.
Natürlich muss man dann darauf achten, wie die Diode angeschlossen ist. 
Bevor wir Romane schreiben, wäre eine Schaltskizze einfacher.


Gruß
Gast #2871510
Lesenswert?

>lese ich also mit scanf einfach 0x... ein ? bleibt das formatzeichen von
>int ? also das %d ? oder gibt es dafür ein anderes zeichen?

Das ist doch ein ganz anderes Problem, als das was Du in Deinem Titel 
geschrieben hast.

Lies einfach mal die Dokumentation zu scanf/printf. Da steht das alles.
Gast #2871512
Lesenswert?

kjahkahfa jskdhfks schrieb:
> lese ich also mit scanf einfach 0x... ein ? bleibt das formatzeichen von
> int ? also das %d ? oder gibt es dafür ein anderes zeichen?

Ich weiß ja immer noch nicht welches TTY da am Mega644 hängt, aber 
üblicherweise sind Taster die Art der Eingabe und keine PC-Tastatur.
D.h. printf und scanf sind bei µCs nicht die erste Wahl, vor allem weil 
da viel Speicher mit verbraten wird.
Erzähl uns halt mal welches Entwicklungskit Du nimmst, STK500 o.ä., dann 
kann auch was konkretes dazu gesagt werden.
Und ein vollständiges Programm wäre auch sinnvoll.
Vor allem weil da keine #includes usw. zu sehen sind ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren