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..
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".
DDRB gibts doch beim *X*Mega gar nicht. Und PORTB ist ein struct. Schau ins Datanblatt oder in iox128a1.h oder besser in Beides.
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...
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?
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
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...
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.
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.
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...
>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);
}
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
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
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.
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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.