Pin definieren beim Atmel-Controller, Pin Namen geben

Gast #1046238
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
Gast #1046307
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
Gast #1046364
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 ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren