Forum: Mikrocontroller und Digitale Elektronik Ports konfigurieren, einlesen und an weitere Ports weiterleiten


von kjahkahfa j. (Firma: fhkshfkshd) (paco89)


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?

von loller (Gast)


Lesenswert?

LOL
Es fehlen:
Welcher µC ?
Vollständiges Programm !
LEDs active high oder active low ?
Und Hausaufgaben sind für zuhause und selbst zu lösen, damit man was 
lernt :-P

von kjahkahfa j. (Firma: fhkshfkshd) (paco89)


Lesenswert?

ja, ich versuche ja, dass alleine zu lösen...mir war nur nicht ganz 
klar, wie man hexadezimal-werte einliest...

microcontroller ist ATmega644...
und in der aufgabenstellung nichts über high oder low..keine ahnung, was 
damit gemeint ist...

von Al3ko -. (al3ko)


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ß

von Wilhelm F. (Gast)


Lesenswert?

Natürlich kann man einen Einlese-Pin sofort an einen anderen Pin weiter 
leiten.

Das machte ich bei einem 8051 so, das DCF77-Signal einlesen, und am 
anderen Pin mit LED zur Sichtkontrolle ausgeben.

von kjahkahfa j. (Firma: fhkshfkshd) (paco89)


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?

von Hmm (Gast)


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.

von loller (Gast)


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

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.