PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibo2: C und Assembler progammieren



arc
10.07.2012, 17:12
Hallo Zusammen,

ich bin Neueinsteiger in C und habe mir deswegen eine Nibo2 gekauft. Die C Programmierung klappt soweit recht gut und der gute Nibo2 tut auch manchmal wirklich was ich von ihm will.

Nun habe ich gelesen dass man diesen auch in Assembler programmieren kann. Ich würde nun gernen einige Programmschnipsel Assembler in mein C Programm integrieren.

Ich benutze AVR Studi 4 + avr-gcc und bin nun soweit gekommen dass er zumindes den Assembler Code akzeptiert und mir auch im AVR Studio das anzeigt was ich will. Hier das Programm dazu:

int main()
{
asm
(
"ldi R16,0b11111111" "\n\t"
"out 0x17,R16" "\n\t"

"ldi R17,0b00000010" "\n\t"
"out 0x18,R17" "\n\t"
);
}

Hierbei ist 0x17 -> DDRB was ich somit auf "Ausgang" setze und 0x18 -> PORTB mit dem ich das LED anschalten lassen sollte. Dass die Leds über PORTB angesteuert werden habe ich hierher: http://www.nibo-roboter.de/wiki/Bibliothek
Hier ist auch noch ein Schaltplan vom Nib02 zu finden: http://www.nicai-systems.com/de/nibo2-downloads-a-links.html

Nun könnt ihr euch denken dass dies nicht funktioniert, sonst würde ich nicht fragen. Ich verstehe aber leider nicht warum, und hoffe auf Eure Hilfe. Reite ich hier eventuell falschrum auf dem Pferd und sehe das alles falsch oder habe ich eine Chance dies wirklich so zu machen wie ich mir das vorstelle, also dass es möglich ist Assembler Schnipsel in meinen C Code zu integrieren?

Eine weitere Frage habe ich dazu auch noch: Wenn ich hier etwas unkontrollierte Codes in meinen Nibo2 überspiele...kann da was kaputt gehen??

Schon mal vorab vielen Dank für Eure Bemühunge und wenn Ihr noch etwas genauer wissen müsst, lasst es mich wissen.

Grüße, arc

arc
10.07.2012, 22:04
Hallo zusammen,

habe die Lösung selber herausgefunden. Nachdem ich nach Hochladen die Ports ausgelesen, und auf dem NIBO2 Display anzeigen habe lassen wusste ich dass die gewünschte Bitfolge an der gewünschte Stelle auch im Nibo2 angekommen ist. Dann könnte es ja eig. nur noch daran liegen dass ich das falsche Port angesprochen habe. So war es auch :)
Ich habe noch etwas recherchiert und die Portbelegung des ATMega128 im Nibo2 gefunden:
http://www.nibo-roboter.de/wiki/NIBO_2/Haupt-Controller

Mit diesm Code kann man nun die 2 Frontscheinwerfer anschalten:

int main()
{
//hier kann C Code stehen
asm
(
"ldi R16,0b11111111" "\n\t"
"out 0x17,R16" "\n\t"
"ldi R17,0b00100000" "\n\t"
"out 0x18,R17" "\n\t"
);
//hier kann C Code stehen
}


Und so sieht es aus wenn man den Inhalt von PORTB auf dem Nibo2 Display anzeigen lassen will:

#include <nibo/niboconfig.h>
#include <nibo/display.h>
#include <nibo/gfx.h>
#include <stdio.h>
#include <avr/io.h>
#include <stdint.h>

int main()
{

display_init();
gfx_init();

asm
(
"ldi R16,0b11111111" "\n\t"
"out 0x17,R16" "\n\t"
"ldi R17,0b11111111" "\n\t"
"out 0x18,R17" "\n\t"
);
int port_b =PORTB;
char text[3]="---";
sprintf(text, "%d", port_b);
gfx_move(0, 20);
gfx_print_text(text);
return 0;
}

Nun beleibt noch die Frage offen ob ich mit meinem Ausprobieren den nibo2 schaden zufügen kann? Wer hat eig. noch so ein Ding und programmiert daran rum? Würde mich gerne austauschen.

Grüße, arc