Brauch hilfe beim programmieren.

Gast #1699883
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..
Gast #1700126
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...
Angehängte Dateien:
Gast #1700633
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...
#1700640
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.
#1700642
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.
Gast #1700680
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...
Gast #1700690
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);
}
Gast #1700696
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
#1700701
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
Gast #1700712
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.
Gast #1701505
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
#1702661
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

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