PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Code zu RN-Control 1.4 + DIP + Display robotikhardware???



Banzai
02.03.2007, 13:07
Hallo erstmal,

hat jemand schon Erfahrung mit o.g. Verbindung und kann C-Quellcode beisteuern?
Viele Lösungen hier sind Bähscom, damit will ich mich (und hinterfragt das einfach nicht) nicht beschäftigen.

Ausserdem: Ich bin absoluter Neubeginner in Mikrocontroller-Programmierung!

many thanxs

Banzai

Banzai
03.03.2007, 22:31
Hallo zweitmal,

ich habe jetzt von der Wissensseite/Quell-Code den Code von Peter Fleury ausprobiert und versucht die entsprechenden Anpassungen vorzunehmen (die Pins scheinen ja nicht dem Beispiel zu entsprechen, wenn man die Doku zum Adapter und zum Display anschaut).

Aber:
Essig wars... nix wars... totales Versagen!!!

Kann mir nicht jemand sagen, was im Quellcode des Beispiels angepasst werden muss, damit ich wenigstens dieses blöde "Hello World" angezeigt kriege? Ich wollte mir die Problematik bei etwas "Learning&Doing" näher bringen, aber inzwischen könnte ich den Mist bloss noch in die Ecke pfeffern....

Bitte helft.....

:cry: :cry: :cry: :cry: :cry: :cry:

Banzai
04.03.2007, 17:30
Hallo drittmal,

jetzt weiß ich es sicher.. Das Display funktioniert . Das auf der CD enthaltene BASCOM Programm für ATMega32 angepasst und schon zeigt das Display auch was an.

Fehlt nur noch eine vernünftige Lösung in C......

Keine Ideen, Leute????? :(

Banzai
08.03.2007, 22:14
Hallo erstmal,

schön wie dieser Thread besucht wird, auch wenn hilfreiche Antworten bisher ausblieben. Toll ist auch, dass der Ansichtszähler trotzdem steigt.... entweder hat keiner eine Lösung, jeder sucht danach oder ich bin in Forums-Ungnade gefallen?!?

OK, auch wenn in mehreren anderen Threads dieses Thema schon angesprochen wurde und anscheinend einige Leute ihre Displays mit AVR-GCC auch zum laufen gebracht haben, warte ich momentan noch auf die göttliche Eingebung.

Das schlimmste ist allerdings, dass die Einträge hier völlig ignoriert werden. Kann mich nicht wenigstens ein Moderator beschimpfen, dass ich schon wieder einen neuen Thread aufgemacht habe?

Es würde aber auch schon ein funktionierender Code reichen. Die ganzen Tipps aus diesem Forum, von www.mikrocontroller.net und AVR Freaks und was weiss ich, haben mir aufgrund vieler Wissenslücken meinerseits auch nicht viel geholfen. Trotzdem danke dafür, da ich jetzt (glaube) zumindest schon teilweise zu verstehen, wie die grobe Vorgehensweise ist.

Also, eine letzte Bitte um Unterstützung:

Hat bitte jemand einen funktionierenden C-Code für RN-Control 1.4, KS0073 Display und Adapter von robotikhardware????

Mein Hauptproblem ist (so denke ich ) die Initialisierung, welcher Schritt wann, wieoft, welche Pausen usw.. Das Beispiel im Datenblatt (das von Samsung und das von robotikhardware) brachte mich auch nicht weiter, weder im < 4 Zeilen Modus noch mit 4 Zeilen.

Jetzt habe ich (nachdem ich vorher das umgeschriebene BASCOM-Beispiel eingespielt habe, danach meinen Code ), zumindest einen blinkenden Cursor in der 3. Zeile gehabt, auch wenn das Display die Return Home und Clear Display mal fein ignoriert hat. Dann einen &-Fehler im Code geändert, der für das senden der Zeichendaten zuständig ist und schon wars wieder nix. Display leer und an, ohne Cursor..... ich flipp noch aus.

#include <avr/io.h>

#include <util/delay.h>

/* Port Definition */
#define LCD_PORT PORTB
#define LCD_DB0 0
#define LCD_DB1 1
#define LCD_DB2 2
#define LCD_DB3 3
#define LCD_DB4 0
#define LCD_DB5 1
#define LCD_DB6 2
#define LCD_DB7 3
#define LCD_LIGHT 4
#define LCD_EN 5
#define LCD_RW 6
#define LCD_RS 7

#define LCD_DDR DDRB
#define LCD_BUSY PINB.7

unsigned char lcd_is_busy()
{
_delay_ms( 50 );

return 0;
}

void lcd_enable()
{
LCD_PORT |= ( 1 << LCD_EN );
_delay_us( 10 );
LCD_PORT &= ~( 1 << LCD_EN );
}

void lcd_cmd( unsigned char command )
{
unsigned char tmp = ( command >> 4 ) & 0x0F; // High-Nibble nach unten schieben

LCD_PORT |= tmp; // senden

lcd_enable(); // EN umschalten

tmp = command & 0x0F; // Low-Nibble nehmen

LCD_PORT |= tmp; // senden

lcd_enable(); // EN umschalten

while( lcd_is_busy() );
}

void lcd_data( unsigned char data )
{
unsigned char tmp = ( data >> 4 ) & 0x0F; // High-Nibble nach unten schieben

tmp |= ( 1 << LCD_RS ); // Daten senden vorbereiten

LCD_PORT |= tmp; // senden

lcd_enable(); // EN umschalten

tmp = data & 0x0F; // Low-Nibble nehmen

tmp |= ( 1 << LCD_RS ); // Daten senden vorbereiten

LCD_PORT |= tmp; // senden

lcd_enable(); // EN umschalten

while( lcd_is_busy() );
}

void init_display()
{
_delay_ms( 50 ); // power up wait

LCD_PORT = ( 1 << LCD_DB5 ); // Init
lcd_enable();
_delay_ms( 10 );
lcd_enable();
_delay_ms( 10 );
lcd_enable();
_delay_ms( 10 );

LCD_PORT = ( 1 << LCD_DB5 ); // 4-Bit Modus
lcd_enable();
LCD_PORT = 0; // RE = 0
lcd_enable();
_delay_ms( 10 );

// Extension Function Setting
LCD_PORT = ( 1 << LCD_DB5 ); // 4-Bit Modus
lcd_enable();
LCD_PORT = ( 1 << LCD_DB2 ); // RE = 1
lcd_enable();
_delay_ms( 10 );

LCD_PORT = 0; // Extension Function Set
lcd_enable();
LCD_PORT = ( 1 << LCD_DB0 ); // 4-Zeilen-Modus
lcd_enable();
_delay_ms( 10 );

LCD_PORT = ( 1 << LCD_DB5 ); // 4-Bit Modus
lcd_enable();
LCD_PORT = 0; // RE = 0
lcd_enable();
_delay_ms( 20 );

// Display On
LCD_PORT = 0;
lcd_enable();
LCD_PORT = ( 1 << LCD_DB3 ) | ( 1 << LCD_DB2 ) | ( 1 << LCD_DB1 ) | ( 1 << LCD_DB0 );
lcd_enable();
_delay_ms( 10 );

// Clear Display
LCD_PORT = 0;
lcd_enable();
LCD_PORT = ( 1 << LCD_DB0 );
lcd_enable();
_delay_ms( 10 );

// Entry Mode Set
LCD_PORT = 0;
lcd_enable();
LCD_PORT = ( 1 << LCD_DB2 ) | ( 1 << LCD_DB1 );
lcd_enable();
_delay_ms( 10 );

// Return Home
LCD_PORT = 0;
lcd_enable();
LCD_PORT = ( 1 << LCD_DB1 );
lcd_enable();
_delay_ms( 10 );

// Licht an
LCD_PORT = ( 1 << LCD_LIGHT );
}

int main( void )
{

DDRB = 0xff; /* Port als Ausgang deklarieren */
PORTB = 0x00; /* alles aus */

init_display();

_delay_ms( 10 );

lcd_data( 0b01010011 );
lcd_data( 0b01010011 );
lcd_data( 0b01010011 );
lcd_data( 0b01010011 );
lcd_data( 0b01010011 );
lcd_data( 0b01010011 );

return 0;
}


Man riecht sich

Banzai

Pascal
08.03.2007, 23:04
Ich kann jetzt leider nicht den ganzen code durchschauen, ein wenig was ist mir aber trotzdem auf-/eingefallen:
- hast du den mcu-takt angepasst? (auch beim beispiel von fleury, das sollte ja eigentlich schon funktionieren)

- in ein avr-programm gehört immer eine endlosschleife, ansonsten kann man nicht vorhersagen, was passiert

Banzai
08.03.2007, 23:50
DANKE
DANKE
DANKE

Werd's ausprobieren.... auch wenn ich schon alle möglichen Wait's reingesetzt habe...


Danke, Danke, Danke =P~ =P~ =P~ =P~

Banzai
09.03.2007, 12:14
Hmmmm....

also einen GROSSEN Mistbock habe ich bei der PIN-Verteilung geschossen.

Die Zuordnung PIN1 = DB0 usw. ist genau umgedreht (jaja, wer lesen kann ist klar im Vorteil ). Ich werde mich bei Gelegenheit persönlich dafür bestrafen.

Allerdings.... das Dingens geht immer noch nicht. Inzwischen habe ich herausgefunden, dass die Fleurys-LCD-LIB beim Busy-Flag stehen bleibt. Hat der DIP-Adapter dieses Feature nicht?!? Da muss doch eine bestimmte Leitung High sein, damit das mit dem Busy funktioniert?!?

Abgesehen davon, selbst wenn man das Busy-Warten in eine 100ms Warteschleife tauscht, geht nix. Das Display versucht auch 6dot statt 5dot anzuzeigen, obwohl nirgends das 6dot gesetzt wird.

Der Cursor flitzt zwar inzwischen flott über die Anzeige, aber entweder sind die Zeichen von irgendwelchen Vorversuchen noch drin, oder es bleibt leer (bis auf einen irgendwo blinkenden Cursor, der sich seine Position bei jedem Reset neu sucht..... ARGHHH ).

Hat noch jemand eine Idee oder fertigen funktionierenden Code?

Greetings

Banzai

Banzai
12.03.2007, 21:57
SO EIN DRECKSDING

Anscheinend ist ein Wunder, dass unsere moderne Zivilisation mit ihren elektronischen Errungenschaften überhaupt überlebt, wenn es schon ein unendlicher Akt ist, so ein Drecksdisplay zum Laufen zu bringen!

ICH HASSE ES

Entweder lügen alle, die behaupten so ein Sch****ding zur Anzeige bewegt zu haben, sind selbst der Konstrukteur von so einem Mist oder ich bin echt zu blöd dazu, selbst vorgefertigten Code zum Laufen zu bringen!

Sagte ich schon ICH HASSE ES?

Schliesslich bin ich jetzt dem endgültigen Nervenzusammenbruch nahe. Robotikhardware wird Pleite gehen, weil so gesehen nur ich Hammel so ein Display gekauft habe, weil jeder andere so schlau war, davon die Finger zu lassen.

Erwähnte ich schon DAS ICH ES HASSE?

Die Hoffnung auf passende Hilfe gebe ich inzwischen auch auf, da ich der einzige auf der Welt bin, der so simple Sachen einfach nicht versteht und es verlorene Liebesmüh ist, es mir zu erklären.

Konnte ich schon loswerden, DAS ICH ES HASSE?

Vielleicht findet sich für das Sch****-Display ein schöner Platz zwischen anderen vergessenen Projekten in einer unscheinbaren Pappschachtel im hintersten Eck eines dunkelen Kellers.....

Sorry, musste mich jetzt mal auskotzen.

Banz

corone
12.03.2007, 23:08
wenn's dir hilft: ich habe schon zwei displays erfolglos anzusteuern versucht. ausgehend von der annahme, dass ich's auch ein drittes mal verbocken würde, beschäftige ich mich lieber wieder mit einfacheren sachen... quantenphysik, relativitätstheorie, frauen etc... eben allem, was jedes grundschulkind einfach so versteht ;-)

ernsthaft: ich kapier die teile auch nicht. versuch's irgendwann noch mal, aber nich heut und nich morgen.

Banzai
13.03.2007, 22:52
Hallo corone...

...du beschäftigst dich mit


FRAUEN

Was ist das? Ein neues RN-Modul? Noch schwerer zu verstehen als ein Display? Welche Version denn? Ich hab' gehört die Version 7 soll Schwierigkeiten machen....

Danke für deine tröstenden Worte.... mal sehen mit welchem Thema ich mich jetzt beschäftige... hmmm... he! SERVOS! PWM... häh... naja... vielleicht kommen die auch noch in die selbe Pappschachtel =P~

Banz