Pin definieren beim Atmel-Controller, Pin Namen geben

Gast #1046238
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
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
>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

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