www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pin definieren beim Atmel-Controller, Pin Namen geben


Autor: At (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Habe eine Frage. Und zwar experimentiere ich mit einem Atmel Controller: 
dem ATMega16. Ich programmiere in C. Ich habe nun vor etwas anzusteuern. 
Ich muss dafür die Pins bzw. die Ports auf Ausgang schalten. Hierzu 
setze ich erstmal das DDR auf Ausgang. Nun möchte ich zum Beispiel, dass 
der Pin 1 am Port B, also PB0 den Namen RNW trägt. D.h. ich möchte 
soetwas in der Art machen:

DDRB = 0xff;

//Definiere das Pin 1 am Port B, also die Adresse 0x01 den Namen RNW 
trägt.

RNW = (PORTB = 0x01);

Hmm dass sieht irgendwie nicht so aus, als würde es klappen .. denke ich 
muss hier mit einem Zeiger arbeitenm, weil ich ja auf die Adresse 
zeige..

Mein Ziel ist es nachher im Programm einfach zu schreiben ...

for(i =0, i < 5, i++)
{
   Setze RNW;
} ...

Will also nicht immer die Adresse des Pins angeben. das hat den Sinn, 
dass wenn ich meine Einheit die ich steuern will verbaue nicht auf die 
richtige verdrahtung achten muss, sondern diese im Kopf schnell anpassen 
kann, sprich NRW eine neue/andere Adresse einmalig zuweisen kann.

Kann mir da wer weiter helfen .. Danke

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannst

#define set_RNW PORTB |= (1<<PB0)

machen...

Dann kannst du einfach

set_RNW;

schreiben und am PORTB wird der Pin PB0 gesetzt...

Autor: At (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Autor: At (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe nun folgendes übersetzt:

#include <avr/io.h>

#define set_RNW PORTB = 0x01;

void main ()
{
  DDRB = 0xff;


  set_RNW;

  return 0;
};


Ich schaue mir mit dem Debug die Register an:

Zunächst dass DDRB Register ... es werden alle 8 Bits gesetzt nach der 
Zeile DDRB=0xff;

Nun wird nach der zeile das erste Bit im Register PORTB gesetzt.
Okay bis da verstehe ich es. Es läuft wie ich es will.

Nun nach dem Anweisungsblock wird plötzlich auch das 1. Bit im Register 
PINB gesetzt, aber wieso? dass heißt dann doch sowas wie eingabe

Autor: Chris W. (squid1356)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da hat jemand die GCC-Tutorials nicht gelesen...

AVR-GCC-Tutorial

Autor: At (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder es da überlesen/vergessen ;)

Autor: Chris W. (squid1356)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann ist ja alles geklärt ;-)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nun wird nach der zeile das erste Bit im Register PORTB gesetzt.
>Okay bis da verstehe ich es. Es läuft wie ich es will.

>Nun nach dem Anweisungsblock wird plötzlich auch das 1. Bit im Register
>PINB gesetzt, aber wieso? dass heißt dann doch sowas wie eingabe

Das ist völlig normal. Wenn PORTB0 ein Ausgang ist
wird der Zustand des Pins auch immer in PINB0 auftauchen.
Also wenn du PORTB0 auf 1 setzt wird auch PINB0 1.
Es sei denn du schliesst den Ausgang kurz gegen Masse ;)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
At wrote:

>    Setze RNW;

So geht es auf keinen Fall.
Bitvariablen muß man einen Wert zuweisen, also
RNW = 0;
..
RNW = 1;

Wie man Portpins als Bitvariablen definiert, steht hier:

http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

Und ein praktisches Beispiel:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.