mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Brauch hilfe beim programmieren.


Autor: demajor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
servus,
ich habe das avrstudio4 und winavr installiert und versuche jetz ein 
testprogramm für mein atxmega128a1 zu schreiben.
nur leider kann ich nich übersetzen:
#include <avr/io.h>

int main(void) {
DDRB |= (1 << PB1);
PORTB |= (1 << PB1);

return 0;
}

is da irgendein fehler??

Erster Error:
'DDRB' undeclared (first use in this function)
.. selbe für PORTB

lg..

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

schau mal bitte, ob in der Liste an der Seite (siehe Screenshot) die 
io.h aufgeführt wird.
Es klingt so, als könnte der Compiler sie nicht finden. Eigentlich 
sollte er dann jedoch schon vorher einen Fehler ausgeben, wie "...io.h: 
no such file or directory".

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRB gibts doch beim *X*Mega gar nicht. Und PORTB ist ein struct.
Schau ins Datanblatt oder in iox128a1.h oder besser in Beides.

Autor: demajor (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
servus,
also ich wüsste nich warum es den PORTB nich gibt oder eine struct 
(keine ahnung was das bedeutet) ist?? hab ein foto hochgeladen. welche 
ports kann ich denn benutzen bzw programmieren um leds usw anzusteuern??
ob die io.h drin is schau ich direkt ma nach...
vielen dank...

Autor: demajor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also die io.h is auch eingebunden ... weiß da keiner was??

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
demajor schrieb:
> oder eine struct (keine ahnung was das bedeutet)

Oh, böser Fehler. Wie steht es denn um deine allgemeinen Kenntnisse 
bezüglich Mikrocontroller und C Programmierung?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>also ich wüsste nich warum es den PORTB nich gibt...

PORTx, DDRX, PINx gibt es beim ATXMega nicht. Lies bitte im Manual A 
nach.

MfG Spess

Autor: demajor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit mc siehts nich so gut aus ... is mein 2. projekt was ich gestartet 
hab.. das erste war eine lauflicht mit ner 7x20er matrix, laufn halt 
paar wörter durch etc, das ganze aber übern atmega32. da hat die 
programmierung so hingehaun.. meine c kenntnisse gehen eher in richtung 
konsolen programmierung ... hab aber schon was heraus gefunden:

#include <avr/io.h>

int main(void) {
PORTB.DIR = 0xFF;
PORTB.OUT = 1;

return 0;
}

lässt sich übersetzen und auch übertragen. die led am Port B Pin 1 
leuchtet aber trotzdem nicht...

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
demajor schrieb:
> meine c kenntnisse gehen eher in richtung
> konsolen programmierung

Dann wirst du ja auch wissen, was eine struct in C ist, oder?

demajor schrieb:
> lässt sich übersetzen und auch übertragen. die led am Port B Pin 1
> leuchtet aber trotzdem nicht...

Der Compiler übersetzt alles, was von der Syntax her richtig ist. Er 
überprüft aber nicht, ob irgendwelche Macros vielleicht auf falsche 
Addressen zeigen. Nimm da mal den Ratschlag von spess53 an.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
demajor schrieb:
> mit mc siehts nich so gut aus ... is mein 2. projekt was ich gestartet
> hab.. das erste war eine lauflicht mit ner 7x20er matrix, laufn halt
> paar wörter durch etc, das ganze aber übern atmega32. da hat die
> programmierung so hingehaun.. meine c kenntnisse gehen eher in richtung
> konsolen programmierung ... hab aber schon was heraus gefunden:
>
> #include <avr/io.h>
>
> int main(void) {
> PORTB.DIR = 0xFF;
> PORTB.OUT = 1;
>
> return 0;
> }
>
> lässt sich übersetzen und auch übertragen. die led am Port B Pin 1
> leuchtet aber trotzdem nicht...

Das kann jetzt natürlich daran liegen, dass dein LED gegen Vcc 
geschaltet ist, in diesem Falle musst du den Pin auf 0 setzen

Mach doch einfach
PORTB.OUT = 0xAA;

Dann haben die Pins abwechselnd 0 1 0 1 0 1 0 1
und mit einem Multimeter (oder LED) kann man das gut detektieren.

Autor: demajor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
led leuchtet... yeppih
wollt sie jetz nur mal zum blinken bring:
#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 1000000UL //1Mhz

int main(void) {
PORTB.DIR = 0xFF;
while(1) {
   PORTB.OUT |= (1<<PIN1);
   _delay_ms(1000);
   PORTB.OUT |= (0<<PIN1);
   _delay_ms(1000);
}

return 0;
}

... 0 Errors, 0 Warnings

blinken tut sie aber nicht...
für mich is das delay nur wichtig fürs entprellen der Taster...

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>PORTB.OUT |= (0<<PIN1);

eine 1 mit einer 0 zu "verodern" ist auch nicht sinvoll...

versuchs so:

int main(void) {
PORTB.DIR = 0xFF;
while(1) {
   PORTB.OUTSET = 0xFF;
   _delay_ms(1000);
   PORTB.OUTCLR = 0xFF;
   _delay_ms(1000);
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
demajor schrieb:

>    PORTB.OUT |= (0<<PIN1);

Sagtest du nicht, du hättest schon Mega32 programmiert?

Autor: demajor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
joo cool besten dank .. dann hab ich den anfang geschafft ... nette 
antwort von "ich"... tipp hatt sofort geholfen!
ich habe mega32 geproggt nur da immer:
DDRB = 0b00000010;
PORTB = 0b00000010;

is so natürlich kleine umstellung..

VIELEN DANK

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
demajor schrieb:
> joo cool besten dank .. dann hab ich den anfang geschafft ... nette
> antwort von "ich"... tipp hatt sofort geholfen!
> ich habe mega32 geproggt nur da immer:
> DDRB = 0b00000010;
> PORTB = 0b00000010;

Da hättest du da mal in deine Programmier-Ausbildung investieren sollen.
Das ist genau der Stil, von dem einen hier im Forum am heftigsten 
abgeraten wird.

http://www.mikrocontroller.net/articles/Bitmanipulation

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zumal die Bitmanipulation bei den xmegas sowas von genial gelöst wurde 
mit .OUTSET, .OUTCLR .OUTTGL
Ist deutlich schöner lesbarer und abgesehen davon etwa doppelt so 
schnell wie mit der "klassischen" Methode.

Ich kann dir nur ans Herz legen die Xmega Application Notes von Atmel zu 
lesen. Geballte Info ohne viel drumrum.

Autor: KiwiNane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey, endlich mal ein thread der kurz und knapp led ansteuerung beim 
xmega aufzeigt! ich wollte nur mal wissen wie man einen Taster, der an 
VCC angeschlossen ist, richtig abfragt:

PORTH.DIR &= ~(1<<PIN0);
if(PORTH.IN & 0b00000001) {
   //FKT
}

funktioniert bei mir nicht richtig. Ich hab entprellte Taster, also kann 
es daran eig auch nicht liegen.

MfG KiwiNane

PS Taster wie zu sehen an PORTH Pin0

Autor: KiwiNane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso ... der rest des Ports H wird nicht verwendet..

Autor: KiwiNane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weiß keiner was??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Ausgabemöglichkeit vorsehen und wenn es nur 8 Leds an einem anderen 
Port sind.
Dann den PINH komplett, ohne irgendwas daran zu verändern, auf diesen 
LED-Port rausschieben.
Dann die Tasten drücken und nachsehen, was die LED machen.


(Ich schätze das es wieder mal eines von 2 üblichen Problemen ist:
* Du gehst davon aus, dass die Tasten eine 1 liefern, wenn sie gedrückt
  werden. In Wirklichkeit liefern sie aber eine 0
* Du hast keine Pullup oder Pulldown Widerstände. Weder externe noch
  interne

Das dritte übliche Problem
"funktioniert bei mir nicht richtig" ist keine vernünftige 
Fehlerbeschreibung mit der man was anfangen könnte. "Doktor, es tut weh" 
ist nichts, womit ein Arzt eine fundierte Diagnose stellen könnte. Noch 
nicht einmal ansatzweise.

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.