www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Am PortB binär ausgeben mit C


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

um meine R/2R Netz zu testen habe ich in CodeVision so ein Prog 
geschrieben. Es sollte ne Rampe darstellen und das macht das Prog auch, 
aber die Rampe hat 5 grössere Treppen. Ich denke es liegt an Befehl den 
ich verwende DDRB=.... Das eigentlich wie ich glaube nur für 
Initialisierung benutz wird und nicht zur Ausgabe.

#include <mega16.h>

unsigned int i;

void main(void)
{
while (1)
      {

      for (i=256; i > 0; i--)
        {
          DDRB=i;
        };
      };
}




Ich habe das ganze noch mit asm Programm getestet:

.INCLUDE "m16def.inc"

; Register Definitionen
;
.DEF rmp = R16 ; Multipurpose Register
;
  ldi rmp,0xFF;  Alle Pins von Port B als Ausgang
  out DDRB,rmp ; in Datenrichtungsregister
sawtooth:
  out PORTB,rmp ; Inhalt von rmp an Port B ausgeben
  inc rmp ; erhöhen
  rjmp sawtooth ; und weiter fuer immer

und meine Rampe sieht da gerade aus.

In asm Programiere ich aber nicht und würde wie man Zahlen am Port 
ausgibt.
Danke !

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>for (i=256; i > 0; i--)
>        {
>          DDRB=i;
>        };

PORT != DDR
An einem acht Bit breiten Port kannst du keine 256 ausgeben.

Autor: Dirk Dörr (dirkd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

in Deinem Ass. steht doch auch

 out DDRB,rmp ; in Datenrichtungsregister
sawtooth:
  out PORTB,rmp

Also erst Datenrichtung setzen

DDRB = 0xFF;

Dann in der Schleife die Ausgabe

PORTB = i;

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich weis,
und wie gebe ich dann z.B. 255 aus ?

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PORTB = 255;

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut ! Danke!

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also hab eben ausprobiert so geht das nicht, nur gleichspannung raus :)


#include <mega16.h>

unsigned int i;

void main(void)
{
while (1)
      {

      for (i=255; i > 0; i--)
        {
          PORTB=i;
        };
      };
}

Autor: Dirk Dörr (dirkd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo ist Dein DDRB geblieben?

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>unsigned int i;


unsigned char reicht.

>#include <mega16.h>

Sofern es sich sich um den avr-gcc handelt, sollte man AFAIR die 
"avr/io.h" einbeziehen.

Hast du schon einen Blick ins avr-ggg-Tutorium geworfen?
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo muss DDRB denn hin in die Schleife rein ?

Ich nutze CodeVision da habe ich jetzt

#include <io.h>
#include <stdio.h>
mal reingenommen

geht nicht :(

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht in, sondern vor die Schleife muss ein Zugriff auf DDRB, damit 
nämlich der PortB als Ausgang konfiguriert wird.

Autor: Dirk Dörr (dirkd)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRB konfiguriert den Port

PORTB macht eine Ausgabe auf dem PORT

PINB ist zum Einlesen des Ports gedacht

Du mußt Dich nur an das Asm-Prog halten oder machen was ich geschrieben 
habe:

> Also erst Datenrichtung setzen
> DDRB = 0xFF;

> Dann in der Schleife die Ausgabe
> PORTB = i;


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt geht's!!!

Ich habe vorhin DDRB auf 0 gesetzt :)))es sollte aber auf FF sein.

Danke !

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.