Not logged in. · Lost password · Register

Baum
Member since Jul 2013
8 posts
Subject: Steigende/Fallende Flanke an einem Pin, Vorinitialisierung als Eingang/Ausgang
Hallo,

es geht um die Aufgabe Tankkontrolle (März 2010):
Das Ganze mal Schritt für Schritt:

Zuflusssensor:
was ich machen würde, wäre:
  1. GICR |= (1<<INT0);
  2. MCUCR |= (1<<ISC01)|(1<<ISC00);
aber wie setze ich hier jetzt Bit 2 bei PORTD?

Zuflusssperre:
Die soll ich im Programm dann später ja selber setzen (also das Bit im PORTD) aber setze ich das Bit bei DDRD als Aus- oder Eingang?

Abflusshahn:
was ich hier machen würde:
  1. GICR |= (1<<INT1);
  2. MCUCR &= ~(1<<ISC11);
  3. MCUCR |= (1<<ISC10);
Den Zustand kann ich über Bit3 in PORTD auslesen

Abflusssensor:
Den Zustand würde ich über Bit1 in PORTD auslesen

Im Zweifelsfall würde ich alle Bits, die mit einem Sensor verbunden sind, im PORTD als Ausgang konfigurieren, so klingt es zumindest ganz unten in der Aufgabestellung und die ganzen anderen relevanten Bits als Eingang, ist aber mehr geraten als gewusst, ich bräuchte da wirklich eine Antwort drauf

Wär schön, wenn sich da mal jemand die Zeit nimmt :)
This post was edited 2 times, last on 2013-07-22, 23:27 by Baum.
Raim
GSPiC-Guru
Member since May 2011
79 posts
In den GSPiC-Folien 14–12 ist beschrieben, in welcher Beziehung digitaler Bitwert und Spannungspegel an einem Pin bei Ein- bzw. Ausgang zueinander stehen.
Baum
Member since Jul 2013
8 posts
ich hab das nochmal überarbeitet, was ich mir dabei gedacht habe, steht im Code.

Noch zwei Fragen:

Gibt es Punktabzug wenn ich DDRD |= (1<<1) anstatt DDRD |= (1<<PD1) schreibe?
schreibe ich immer PDx? also z.B. DDRA |= (1<<PD1) oder passt man sich da an den Namen des DDRs an also: DDRA |= (1<<PA1) ???

  1. static void init(void){
  2.  
  3.     DDRD &= ~(1<<1);
  4.     DDRD &= ~(1<<2);
  5.     DDRD &= ~(1<<3);
  6.    
  7.     PORTD |= (1<<1);
  8.     PORTD |= (1<<2);
  9.     PORTD |= (1<<3);
  10.     //bis dahin war ja alles vorgegeben
  11.    
  12.     DDRD |= (1<<0); //Da mir Pin0 nicht von außerhalb gesetzt wird, setze ich Bit0 im DDRD als Ausgang
  13.     PORTD |= (1<<0); //Der Zufluss soll am Anfang geöffnet werden
  14.     GICR |= (1<<INT0)|(1<<INT1); //beide Interrupts im GICR setzen
  15.     MCUCR |= (1<<ISC01)|(1<<ISC00); //Interuptquelle 0 auf steigende Flanke
  16.     MCUCR |= (1<<ISC11);
  17.     MCUCR &= ~(1<<ISC10); //Interruptquelle 1 auf beliebige Flanke
  18.  
  19.     sei();
  20.     sleep_enable(); //ist selbsterklärend
  21. }
This post was edited on 2013-07-24, 22:13 by Baum.
King-Chris
Member since Oct 2012
31 posts
Also Punkte bekommst du eigentlich in jedem Fall, sofern es läuft und stimmt. So wurde es zumindest uns gesagt.

Die Option mit der du am wenigstens schreiben musst wäre die Hexadezimalschreibweise , das sieht warscheinlich auch am schönsten aus.

Also z.B. DDRD &= ~(0x0E)
morty
SPiC-Meister
(Moderator)
Member since May 2011
331 posts
Ob du die P[ABCD][01234567]-Makros verwendest ist egal. Ich verwende die eh nicht, weil ich sie unleserlich finde. Es gibt sie vor allem deshalb, weil alle Namen, die im Datenblatt vorkommen auch als Markos zur Verfügung stehen.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen