Bascom 4 Zeilen Display zeigt nichts an - Probleme durch den Bootloader?

Industriemeister

Neues Mitglied
01. Mai 2011
4
0
0
48
Sprachen
Hallo Alle zusammen...

Ich lese mich nun schon seit einiger Zeit bei euch hier durch, und nun hänge ich doch mit meinem Problem in den Seilen, da ich nicht mehr weiter weiß.

Zu Mir:

Bin zwar gelernter Elektriker, mach nebenbei noch meinen Meister, trotz alledem hatte ich mit uC nie was am Hut gehabt. Trotzdem möchte ich aufgrund meiner eigenen Bedürfnisse dieses Wissen noch aneignen.

Da ich auch nicht auf FIX & Fertig Zeugs stehe, das auch noch mittels Plug&Play sofort funktioniert, habe ich mich für das SEDU Board entschieden, welches ich mir erworben hab. Wer danach googelt, wird sofort fündig. (Da ich nicht weiß, ob Links hier erlaubt sind, was "andere" Quellen betrifft. Den nötigen Programmer für die Erstinbetriebnahme habe ich mir selbst von Fisch&Fischl zusammengebaut.

Der Bootloader ist also soweit aufgespielt, und ich kann das EEprom vom Mega16 auch prima brennen, alles per USB, ohne den ISP Anschluß.

Aus eurem Forum hier, hab ich testweise versucht, das Wintek Display, welches ich mal bei Pollin gekauft hatte, und meinen damaligen PC über 3F8 damit verbunden hatte, angeschlossen, Auf das richtige Pinning geachtet, und das EEprom gebrannt, mit dem Quellcode hier:
Cassios Thread

den Code ansich hab ich noch etwas angepasst, da ich nur erstmal eine Ausgabe haben wollte:

Code:
$regfile = "M16def.dat"
$crystal = 16000000

'Einbindung der LCD-Bibliothek für ein 2-Prozessor-Display
' $lib "lcd4e2.lbx"
$lib "lcd4e2.lbx"
'Declare Sub Lauflicht_b()

'Bascom kennt keine Display mit 27 * 4 Zeichen, daher 40 * 4 verwenden
Config Lcd = 40 * 4

'man achte auf die Ergänzung E2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , E2 = Portc.4 , Rs = Portc.6
Config Lcdbus = 4
Cursor Off
'Config Pina.3 = Output 'Licht an
'Porta.3 = 1

' Systemvariable der LCD-Bibliothek (wichtig, bloß nicht ändern)
Dim ___lcde As Byte
Dim I As Word
Dim A As Integer
'call Lauflicht_b()

Do


' wählt die beiden oberen Zeilen aus
___lcde = 0

' löscht die beiden oberen Zeilen
Cls :
' wählt die obere Zeile aus
Upperline
Locate 1 , 1
Lcd "..Schreib was...."

Lowerline
Locate 2 , 1
Lcd "hier ebenfalls..."
Cursor Off

' wählt die beiden unteren Zeilen aus
___lcde = 1
Waitms 100

Cls
' Thirdline
Locate 1 , 1
Lcd "powered by"

' Fourthline
Locate 2 , 1
Lcd "ATMEL ATMEGA 16 Chip"
Cursor Off

loop


End

Der Syntax Check ergab keinerlei Fehler - nur - das Display macht nichts, nur die 1. und die 3. Zeile sind mit den Balken ausgefüllt... - Also noch nicht einmal ein CLS

Jetzt die eigentliche Frage:

liegt die ganze Sache an dem Bootloader, der nicht das eigentliche Programm ausführt? - oder hab ich irgendwo nen Denkfehler?

mittels myAVR ProgTool wurde per USBAsp der Bootloader eingespielt. Fuses: Low: 0xFF | High: 0xD8

Der Bootloader stammt von hier: http://chip45.com darüber wurde das EEProm per USB gebrannt.

wäre nett, wenn jmd. mir hier einen weiteren Tipp geben könnte, warum mein Display nicht so arbeitet, wie ich es gern möchte.

mfg
Hannes
 
Hallo Hannes,

was mir so spontan auffällt: Mach mal das do...loop raus. Die Schleife läuft wahrscheinlich viel zu schnell durch als dass du auf dem Display was erkennen könntest weil der Text ja immer wieder gelöscht wird.
 
achso, sry - hatte ich vergessen zu erwähnen...

die
Do
Loop
Schleife hab ich nachträglich eingebaut, da bei dem ersten Versuch nichts passierte. Da hab ich genau anders herum gedacht, bau die Schleife ein, sonst siehste evtl. nix.
Daran lag es aber auch nicht.
 
Hallo Hannes!


Willkommen im AVR-Praxis Forum! :ciao:

Schön, dass du den Weg vom passiven zum aktiven User gefunden hast. :wink:


Was mir an deinem Code spontan aufgefallen ist....
Ich weiß, dass es immer wieder Beispiele mit "___lcde" zum Umschalten der Displaycontroller gibt.
Versuche aber bitte mal "___lcdno" zu verwenden!

Außerdem solltest du die LIB ($lib "lcd4e2.lbx") wieder heraus nehmen.
Ich bin der Meinung, dass hiermit ein falsches INIT gesendet wird.

Apropos INIT....
Zu Beginn solltest du immer ein:
Code:
'---------------------------------------------------
' einmaliges Initialisieren des Displays
Dim ___lcdno As Byte                                        ' LCD-Controller-Schalter


___lcdno = 0
Initlcd
Cursor Off
Cls

___lcdno = 1
Initlcd
Cursor Off
Cls
'---------------------------------------------------
verwenden, um BEIDE Displaycontroller richtig anzusprechen!


Wenn du dir mein Beispiel mal genau ansiehst wirst du bemerken, dass es die Zeilen 3 und 4 gar nicht gibt! :wink:
Das Display hat kurz gesagt "zwei" Controller.... immer für zwei Zeilen!
___lcdno = 0 bewirkt, dass du die oberen beiden Zeilen ansprichst.
___lcdno = 1 bewirkt, dass du die unteren beiden Zeilen ansprichst.
Ergo kann dein Code mit "Thirdline" und "Fourthline" NICHT funktionieren!

Am Einfachsten arbeitest du immer mit:
Locate 1 , 1
und
Locate 2 , 1

Vorher musst du natürlich noch die oberen, oder unteren beiden Zeilen auswählen.

Schau sonst einfach noch mal in mein Beispiel zu dem Display! :wink:

Ach so..... wie aber schon geschrieben....
Vor dem LOOP würde ich testweise besser mal ein WAIT 1 einsetzen.
Den Hinweis mit dem JTAG solltest du ebenfalls beherzigen.


Grüße,
Cassio
 
Hallo,

vielen Dank erstmal für die vielen Infos :)

JTAG muss ich doch nur dann disablen, wenn ich auch genau diesen Port verwenden will oder? - also habe ich mal testweise alle Ports durchgespielt, und es tut sich immer noch nichts. Ob Enabled oder Disabled, Display macht da keine Anstalten.

Jedenfalls ist laut DOKU Port B als JTAG definiert.

Zur generellen Übersicht hab ich hier nochmals den QC:
Code:
$regfile = "m16def.dat"
$crystal = 16000000
$lib "lcd4.lbx"

MCUCSR.7=1    'JTAG disabled, Bit7, und zur Sicherheit
MCUCSR.7=1    'nochmals disabled setzen, wegen unbeabsichtigtes setzen

Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , E2 = Portc.4 , Rs = Portc.6
Config Lcd = 40 * 4

' einmaliges Initialisieren des Displays
Dim ___lcdno As Byte                                        ' LCD-Controller-Schalter

___lcdno = 0      'obere beiden Zeilen enabled
Initlcd
Cursor Off
Cls

___lcdno = 1     'untere beiden Zeilen enabled
Initlcd
Cursor Off
Cls              'Clear Screen

do
___lcdno = 0

' Cls   - unnötig, da  oben schon gelöscht durch Init Phase
Lcd "The Code"
Lowerline
Lcd "powered by ATMEL"

wait 1
loop
End

Ich werd morgen mal mein 2. Display suchen, und es mal damit versuchen. kann ja sein, das dies wirklich ne Macke hat.

//Nachtrag:
--> das mit der 3. und 4. Zeile hatte ich schon verstanden, nur, zum besseren Verständnis, wenn man 3. und 4. Zeile sagt, anstelle von 2. Controller 2. Zeile, usw.
 
Hi,

Ich werd morgen mal mein 2. Display suchen, und es mal damit versuchen. kann ja sein, das dies wirklich ne Macke hat.

//Nachtrag:
--> das mit der 3. und 4. Zeile hatte ich schon verstanden, nur, zum besseren Verständnis, wenn man 3. und 4. Zeile sagt, anstelle von 2. Controller 2. Zeile, usw.

im folgenden Thread ...
Learning BASCOM - Lernen von Anfang an
hab ich meine ersten Erfahrungen mit Bascom und einem 4zeiligen Display untergebracht. Bis auf das Problem mit dem falsch verdrahteten Port ist mein Code eigentlich lauffähig. Die Programme sind auf jeweils zum Download im Thread drin. Eventuell hilft dir das ja weiter ...

Gruß
Dino
 
Hallo Hannes!

Zum Ersten.....
Du hast immer noch die LIB ($lib "lcd4.lbx") in deinem Quellcode!
Die solltest du doch entfernen. :wink:


Zum Zweiten....
Die Pins für den JTAG liegen auf PortC!
Dein Display befindet sich ebenfalls an PortC und darum MUSS JTAG abgeschaltet sein!

Wirf doch noch mal einen Blick auf das Pinlayout:
Mega16_Pins.gif


Kannst du die FUSES nicht über BASCOM ändern und damit für dich "sichtbar" das JTAG abschalten?
In BASCOM geht das zumindest sehr einfach!

Im Zweifel kannst du ja auch testweise erst mal einen anderen Port verwenden. :wink:

Ach so...
In deinem QC verwendest du immer noch "LOWERLINE" und nicht "LOCATE 2 , 1" !
Außerdem gibt es keine Anweisung für das Display, dass der erste Text auch immer in der erste Zeile stehen soll!


Grüße,
Cassio
 
OK, du hattest Recht, ich hab da noch einiges nicht so übernommen, wie du es beschrieben hattest.

Jetzt hab ich aber einen gravierenden Fehler bemerkt:

den netten Bootloader, den ich mir da auf den Chip gepackt habe, der funzt soweit auch richtig, jedoch die Prog-Software von chip45 hat so ihre Macken!

Ich hatte mir die neueste Bootloader Version installieren wollen, und gleichzeitig das EEProm neu flashen. MyAVRProgTool hat es mir dann angezeigt:

Flash: 16100 von 16384

EEProm: 660 von 512

also hat der mir die ganze Zeit ne abgehackte hex-Datei eingespielt. deswegen lief das auch nicht.

Bootloader runtergeschmissen - hexfile rein, Mega16 arbeitet wie gewünscht !!!

also erstmal ohne Bootloader.

Bei weiteren Fragen werd ich mich natürlich melden :)

mfg
Hannes

special thanxxs to Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)