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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.