Ein- / Ausgaenge

OP #1571510
Hallo, Ich versuche folgenden Aufbau zum laufen zu bringen. (Dies ist 
mein erster AVR Versuch - bitte um Geduld). Moechte mittels AVR 
Erdfeuchtigkeit messen. Je nach Feuchtigkeitswert soll dann eine LED 
leuchten.

Bevor ich weitermache, moechte ich nur mal wissen ob ich die Ein-  und 
Ausgaenge richtig inititializiert habe. Wuerde mich freuen wenn mir 
jemand sagen koennte ob ich auf dem richtigen Weg bin. Danke.

Gruss Michael


/*
  ATtiny13v

/*

   GND
    |
    R1
    |      /--------+
   LED1    1        5---VCC
    |      |        |
    +PB3---2        6---PB2---LED2---R2----GND
           |        |
           3        7      +-------Nail ~~~ Nail+---VCC (5V)
           |        |      |
     GND---4        8--PB0-+
           +--------+      |
                           R3
                           |
                          GND

LED1 = RED
LED2 = GREEN
R1,R2 = 220 OHM
R3 = 10k OHM

*/

#include <avr/io.h>          // (1)

int main (void) {            // (2)
   // set PB0 as input and PB2 and PB3 as output

   DDRB &= ~( (1<<PB0) | (0 << PB2) | (0 << PB3)); // (3)

   while(1) {                // (5a)
   }                         // (5c)

   return 0;                 // (6)
}
Gast #1571556
Hallo,

ich würde das so machen:

[c]
*/

#include <avr/io.h>          // (1)

int main (void) {            // (2)
   // set PB0 as input and PB2 and PB3 as output

   // DDRB |=  (1 << PB2) | (1 << PB3)
   //(alternativ könnte man hier auch schnell einfach alle zunächst als 
Ausgang deklarieren, dann die Eingänge expliziet setzen)
   //Ausgänge setzen, diese sähe dann wie folgt aus:
    //DDRB = 0xFF             // zunächst alle als Ausgänge schalten)

  // nur wir der Eingang gesetzt, indem gezielt das Bit gelöscht wird
   DDRB &= ~( 1 << DDB0 ); // PB0 gezielt als Eingang setzen

   while(1) {                // (5a)
   }                         // (5c)

   return 0;                 // (6)
}
OP #1572069
Hallo, danke fuer die Hilfe. Nun, ich habe es wie folgt uebernommen. Es 
faellt mir einfach ziemlich schwer (4) zu verstehen. Die Methode (4a) 
ist da schon einfacher.

Frage: Spricht irgendwas dagegen, alle meine Bitmanipulationen mittels 
(4a) Methode durch zu fuehren?

Beim ATtiny13v kann ich doch alle Ports fuer das messen eines Analogen 
Wertes verwenden, oder?

Gruss Michael



#include <avr/io.h>          // (1)

int main (void) {            // (2)

   DDRB = 0xFF;             // (3) Declare all pins on Port B as output
 //  DDRB &= ~( 1 << DDB0);   // (4) Set Pin 0 as input
   DDRB = 0b00000001;   // (4a) same as 4 but easier to understand

   while(1) {                // (5a)
   }                         // (5c)

   return 0;                 // (6)
}
#1572073
Michael M. schrieb:
> Hallo, danke fuer die Hilfe. Nun, ich habe es wie folgt uebernommen. Es
> faellt mir einfach ziemlich schwer (4) zu verstehen. Die Methode (4a)
> ist da schon einfacher.
>
> Frage: Spricht irgendwas dagegen, alle meine Bitmanipulationen mittels
> (4a) Methode durch zu fuehren?

ja! Es ist unübersichtlicher, de Code ist schwerer zu Portieren, wenn du 
hier Fragen hast und in deinem Code deine Einstellungen mit (4a) machst, 
werden viele dir nicht helfen wollen...

und vor allem: (4) und (4a) sind nicht gleich, und das gleich doppelt...
Persönliche Seite #1572093
Justus Skorps schrieb:
> und vor allem: (4) und (4a) sind nicht gleich

Ich bin heute mal wieder sehr nett:

    DDRB &= ~( 1 << DDB0);
    DDRB = DDRB & ~(1 << DDB0);
    DDRB = DDRB & ~(1 << 0);
    DDRB = DDRB & ~(1);
    DDRB = DDRB & ~(0b00000001);
    DDRB = DDRB & 0b11111110;
    DDRB &= 0b11111110;

Das ist alles gleichwertig (hoffentlich ;-)

Ach ja, noch etwas: 0b11111110 versteht nicht unbedingt jeder Compiler.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.