Mir gelingt es einfach nicht unter Bascom ein 1602 Display an einem
ATmega8535 zum Laufen zu bekommen.
Versucht habe ich folgendes:
Datenleitungen alle auf denselben Port gelegt
RW-Leitung testweise angeschlossen
Es mit den Libs versucht (die laufen wohl mit mit dem ATmega8535)
BUS-Modus versucht
Anderes Display probiert (älteres von Pollin)
Und gefühlt hunderte Webseiten nach Infos durchforstet...
Das Display bleibt leer. Kontrastpoti habe ich angeschlossen. Ich nutze
den internen Oszillator mit 8MHz
Komischerweise funktioniert es unter Great Cow Basic einwandfrei.
Allerdings bin ich diesbezüglich totaler Anfänger und wollte erst mal
unter Bascom arbeiten, weil ich da wenigstens schon ein bisschen was
kann und es da doch vieles an Infos und Hilfe im Netz gibt. Bei GCB
gibts praktisch gar nichts, außer die mitgelieferte Hilfedatei.
Vorerst, ich kenne mich mit BASCOM praktisch nicht aus;-)
Im Vergleich zu einem Beispielprogramm von MCS fällt mir aber auf, daß
das LCDtype Argument im Beispiel ohne Leerzeichen dargestellt ist.
Vielleicht liegt es daran, sofern nicht irgendein Hardware Grund
vorliegt.
https://avrhelp.mcselec.com/index.html?config_lcd.htm
Bei Dir: Config Lcd = 16 * 2
Bei Mcs: Config Lcd = 16x2
Das ist der einzige wesentliche Unterschied zwischen Deinem Programm und
das von MCS.
Gerhard
Gerhard O. schrieb:> Im Vergleich zu einem Beispielprogramm von MCS fällt mir aber auf, daß> das LCDtype Argument im Beispiel ohne Leerzeichen dargestellt ist.
Man beachte auch das "x" in 16x2. 16x2 ist im Gegensatz zu 16*2 kein
arithmetisches Produkt, sondern der vordefinierte Name des Displaytyps.
Der muss genau so geschrieben werden wie in der Anleitung angegeben.
In der Bascom-Dokumentation ist 16 * 2 angegeben. Ich habe aber auch
16*2, 16x2, 1602, 1602A ausprobiert.
Mit den beiden in der freien Version vorhandenen Libs bekomme ich eine
Menge Fehlermeldungen. Hab sie mir nicht abgespeichert, doch sie
deuteten für mich darauf hin, dass die Libs nicht mit dem ATmega8535
kompatibel sind.
Das Beste ist wohl, dass ich mir heute einen ATmega8 besorge und es
nochmal ausprobiere, mit und ohne Libs.
Tim D. schrieb:> mit und ohne Libs.
Bleib bei Deinem 8535, verwende die Leitungen eines einzigen Ports und
mach das mal ohne LIBs. Es gibt genug nachvollziehbaren Quellcode in C.
Auch ASM läßt sich einfach in BASCOM einbinden.
m.n. schrieb:> Tim D. schrieb:>> mit und ohne Libs.>> Bleib bei Deinem 8535, verwende die Leitungen eines einzigen Ports und> mach das mal ohne LIBs.
Das hab ich doch beides gemacht, war mein erster Versuch. Die Libs und
den anderen Kram habe ich erst versucht, nachdem es nicht funktioniert
hat.
> Es gibt genug nachvollziehbaren Quellcode in C.> Auch ASM läßt sich einfach in BASCOM einbinden.
Daran habe ich noch gar nicht gedacht. Aber bedenke, dass ich blutiger
Anfänger bin und dann vermutlich damit ewig herumprobiere, bis ich es
schaffe den Code einzubinden oder zum Laufen zu bekommen.
Tim D. schrieb:> dass ich blutiger> Anfänger bin und dann vermutlich damit ewig herumprobiere
"Ewig" ist ne lange Zeit, das schaffst Du schneller ;-)
Es geht nicht um Herumprobieren, sondern um Verstehen und
Nachvollziehen. Wann willst Du es denn lernen, wenn nicht jetzt!
Zerlege die Aufgabe in Teilschritte: Konfigurieren des Ports, korrekte
Warteschleife (kann anfangs ruhig zu lang sein), Ausgabe von Befehlen
und Daten, korrekte Initialisierung (schwarze 1. Zeile verschwindet
dann) und abschließend die Zeichenausgabe.
Tim D. schrieb:> Kontrastpoti habe ich angeschlossen.
Es müssen ca. 0,5 V eingestellt sein, daß beim Einschalten die obere
Zeile einen schwarzen Balken anzeigt.
Funktioniert das denn soweit?
Mit dem ATmega8 funktioniert es auch nicht. Ich habe es exakt nach
dieser Anleitung gemacht:
https://halvar.at/elektronik/kleiner_bascom_avr_kurs/lcd_textanzeige/
Und auch noch mal das Pollin-Display ausprobiert.
m.n. schrieb:> Tim D. schrieb:>> dass ich blutiger>> Anfänger bin und dann vermutlich damit ewig herumprobiere>> "Ewig" ist ne lange Zeit, das schaffst Du schneller ;-)> Es geht nicht um Herumprobieren, sondern um Verstehen und> Nachvollziehen. Wann willst Du es denn lernen, wenn nicht jetzt!
Schon klar. Aber wenn ich wie aktuell nicht weiterkomme, probiere ich
halt herum.
> Zerlege die Aufgabe in Teilschritte: Konfigurieren des Ports, korrekte> Warteschleife (kann anfangs ruhig zu lang sein), Ausgabe von Befehlen> und Daten, korrekte Initialisierung (schwarze 1. Zeile verschwindet> dann) und abschließend die Zeichenausgabe.
Du sprichst von C? Dann müsste ich doch erst mal von Grund auf C lernen,
bevor ich mich mit den schwierigeren Dingen befasse. Das wäre dann doch
eine lange Zeit. Ich bin nicht mehr so jung, die Zeit wird immer
knapper, weshalb ich mich für Bascom entschied :)
> Tim D. schrieb:>> Kontrastpoti habe ich angeschlossen.>> Es müssen ca. 0,5 V eingestellt sein, daß beim Einschalten die obere> Zeile einen schwarzen Balken anzeigt.> Funktioniert das denn soweit?
Jetzt mit dem ATmega8 haben ich einen schwarzen Balken, bei beiden
Displays. Trotzdem erscheint noch kein Text auf der Anzeige.
BoomBoomMagic schrieb:> http://www.zierath-software.de/AVR/lcd.html
Ganz genau so habe ich es gemacht. Habe den Code noch mal Zeile für
Zeile überprüft. Exakt die selben Ports benutzt. Nochmal testweise 16 *
2 durch 16x2 ersetzt (weil das dort so steht, laut Dokumentation soll
aber beides funktionieren).
Wie schon erwähnt, unter Great Cow Basic laufen beide Displays,
allerdings muss ich dort den RW Pin mit anschließen. Was ich unter
Bascom natürlich auch versucht habe.
Tim D. schrieb:> allerdings muss ich dort den RW Pin mit anschließen. Was ich unter> Bascom natürlich auch versucht habe.
WO ist der RW-Pin angeschlossen? Wo ist der Befehl "Initlcd" im
Quelltext?
Wieso nölen 1000 Andere nicht, daß es an Bascom und nicht an einem
selbst liegt?
Nachtrag: Wo ist die ProgrammSCHLEIFE in Deinem obigen Quelltext?
(Do-Loop)
Die ist NICHT da: Also hat Du es NICHT genau so gemacht, wie in dem von
Dir genannten Beispiel
RW heißt : Read - Write !
Ist er auf low = Write , ist er auf High = Read .
Du willst ja nichts lesen (aus dem Display ) , demnach MUSS der Pin RW
auf Masse gezogen sein zum schreiben !
Rund-Funker schrieb:> WO ist der RW-Pin angeschlossen? Wo ist der Befehl "Initlcd" im> Quelltext?
Es scheint mir das du trotz definitiver Angabe dennoch anschliesst wie
es dir beliebet ?!?
Halte dich bitte EXAKT an den Plan !
InitLcd is nicht wirklich notwendig , kann geschrieben werden , muss es
aber nicht.
Rund-Funker schrieb:> WO ist der RW-Pin angeschlossen?
Der liegt auf Masse. Zum Testen hatte ich ihn an PortD.1 angeschlossen.
Aber der lässt sich so gar nicht erst einem Port zuordnen. Das teilt
einem Bascom auch gleich beim Compilieren mit.
Wo ist der Befehl "Initlcd" im
> Quelltext?
Habe mir den Befehl mal angesehen und ausprobiert. Ändert sich nichts.
Rund-Funker schrieb:> Nachtrag: Wo ist die ProgrammSCHLEIFE in Deinem obigen Quelltext?
Die wird doch hier gar nicht benötigt, wenn ich nur "Hallo" in eine
Zeile schreibe.
BoomBoomMagic schrieb:> Du willst ja nichts lesen (aus dem Display ) , demnach MUSS der Pin RW> auf Masse gezogen sein zum schreiben !
Der liegt auf Masse.
BoomBoomMagic schrieb:> InitLcd is nicht wirklich notwendig , kann geschrieben werden , muss es> aber nicht.
Daß sich der Programmierer von BASCOM die Mühe gemacht und einen Befehl
implementiert hat, den man nicht braucht...
Aber, wenn DU meinst.
Kopf schüttel
Tim D. schrieb:> Die wird doch hier gar nicht benötigt, wenn ich nur "Hallo" in eine> Zeile schreibe.
Na prima, dann funktioniert ja Alles.
Bei MIR zumindest.
...und tschüß!
BoomBoomMagic schrieb:> Es scheint mir das du trotz definitiver Angabe dennoch anschliesst wie> es dir beliebet ?!?> Halte dich bitte EXAKT an den Plan !
Man ich hab längst alle Variationen probiert. Laut Dokumentation kann
ich die Pins zuordnen wie ich will, außer ich verwende den Bus oder die
Lib. Trotzdem habe ich, als ich es nochmal mit dem Atmega8 probiert
habe, die Pins genau so zugeordnet und angeschlossen wie in den
Beispielen auf diversen Webseiten. Mein Listing oben ist vom m8535,
jetzt bin ich beim m8, weil eben der in den meisten Beispielen verwendet
wird.
Teo D. schrieb:> Zeig mal Bilder vom Aufbau!
ATmega8 mit Bascom
ATmega8535 mit Great Cow Basic
Die Bilder davon hatte ich schon vorgestern aufgenommen. Kann jetzt
keine besseren mehr machen, da ich es ja wieder auseinander gestöpselt
habe.
Hi,
nehme an, Du hast einfach die falsche lib erwischt.
Denn es scheint offensichtlich bei etlichen Leuten durchzuschimmern,
dass die BASCOM Libraries schon seit etwa 10 Jahren doch recht
stiefmütterlich behandelt wurden und nicht immer auf dem neuesten Stand
gehalten wurden.
Da gibt es erfreulicherweise neuerdings ein Extraforum nur für BASCOM
https://www.makerconnect.de/index.php?threads/atmega8-und-lcd-mittels-i2c-ansteuern.4075/
Ist zwar nicht exakt Deiner Problemstellung entsprechend, aber dort
kannst Du Suchanfragen starten.
Apropos, ein AVR asm Progrämmchen zur LCD 16x2 hätte ich für den
ATMega8535.
(Ist sowas von asbach uralt.)
Aber welche Programmierumgebung benutzt Du. STK500 und Studio?
ciao
gustav
Karl B. schrieb:> Hi,> nehme an, Du hast einfach die falsche lib erwischt.> Denn es scheint offensichtlich bei etlichen Leuten durchzuschimmern,> dass die BASCOM Libraries schon seit etwa 10 Jahren doch recht> stiefmütterlich behandelt wurden und nicht immer auf dem neuesten Stand> gehalten wurden.
Dann täuschte mich mein eigener Eindruck ja nicht. Es müsste doch aber
auch ohne extra eingebundene Lib funktionieren.
> Da gibt es erfreulicherweise neuerdings ein Extraforum nur für BASCOM> https://www.makerconnect.de/index.php?threads/atmega8-und-lcd-mittels-i2c-ansteuern.4075/
Danke, ich schaue mich dort mal um.
> Apropos, ein AVR asm Progrämmchen zur LCD 16x2 hätte ich für den> ATMega8535.> (Ist sowas von asbach uralt.)> Aber welche Programmierumgebung benutzt Du. STK500 und Studio?
Ich nutze Bascom-AVR mit dem Pololu-Programmer und STK500 native
Treiber.
Ein STK500-Board habe ich auch, aber das hatte ich bisher nicht
benötigt. AVR-Studio habe ich ebenfalls installiert, aber auch damit
überhaupt noch nicht gearbeitet.
BoomBoomMagic schrieb:> wenn ich gleich das erste Bild ansehe, dann sehe ich das du dich absolut> nicht an die Vorgabe gehalten hast - warum dann wundern ??!
Welche Vorgaben denn genau? Das Display ist genau so angeschlossen wie
hier:
http://www.zierath-software.de/AVR/lcd.html
Und selbst wenn nicht, die Ports soll man laut Bascom-Dokumentation frei
konfigurieren können, außer man nimmt den Bus oder die Lib.
Die 4 offenen Datenpins Pins habe ich jetzt halt auch noch auf Masse
gesteckt.
OK, bei der Beschriftung des LCDs ist wirklich scher zu vertun. Sogar
die Kabel sind angelötet (Du glaubst nicht was da schon alles zu sehen
war). ;)
Tim D. schrieb:> Die 4 offenen Datenpins Pins habe ich jetzt halt auch noch auf Masse> gesteckt.
Muss nich, kostet nur Strom.
Und ignoriere diesen "Knaller" Troll! :D
Ok , jetzt wirds mir langsam zu öde.
Du weißt nicht was 4Bit-Mode ist , du weißt nicht was 8Bit Mode ist.
Du kennst nicht die Funktion von RS , Enb , oder wie die Datenbits
arbeiten.
Es ist völlig egal was andere Software brauch oder nicht.
Wenn Bascom vorschreibt das man gewisse Pins in gewisser Art anschliesst
, muss des lernen warum oder akzeptieren.
0der suchst weiter in irgendwelchen schnöden Foren rum.
Der Hersteller hat die Pins ja nicht um sonst gebaut.
Seit 20 Jahren mach ich in Bascom und genauso lang immer wieder Noobs
die es besser wissen oder machen.
Son Display is ja nu das einfachste was es an Bascom gibt.
Sei froh das du die Initialisierung nicht per Hand machen mußt , wäre
eine Lebensaufgabe für dich.
BoomBoomMagic schrieb:> Son Display is ja nu das einfachste was es an Bascom gibt.
Zeig mal Deine Initialisierung.
Ich kenn nur diesen Thread bezüglich BASCOM
Beitrag "Problem beim init eines lcd in Bascom"
"...Das "schlimme" an BASCOM ist ja nicht BASCOM, sondern die Tatsache,
dass viele Einsteiger meinen, sich durch das Verwenden von BASCOM den
Blick in das Datenblatt sparen zu können. So nach dem Motto: BASIC kann
ich ja. Wer sich intensiv mit BASCOM befasst und in der Lage ist, an
kritischen Stellen ASM einzubinden, der kann damit viel erreichen.
Aber meist wird BASCOM nur als ein Baukasten benutzt. Die
vorgefertigten Standardroutinen (Bibliotheken) ermöglichen ja schnelle
Erfolge. Das Verstecken des ASM-Codes führt dazu, sich nicht weiter um
das compilierte Ergebnis zu kümmern..."
ciao
gustav
Teo D. schrieb:> Muss nich, kostet nur Strom.
Strom war noch das Stichwort. Jetzt habe ich noch die Stromversorgung
überprüft, den USB-Kram abgeklemmt und mal saubere 5V aus einem
Labornetzteil draufgegeben.
BoomBoomMagic schrieb:> Ok , jetzt wirds mir langsam zu öde.> Du weißt nicht was 4Bit-Mode ist , du weißt nicht was 8Bit Mode ist.>> Du kennst nicht die Funktion von RS , Enb , oder wie die Datenbits> arbeiten.
Wie du meinst.
> Wenn Bascom vorschreibt das man gewisse Pins in gewisser Art anschliesst> , muss des lernen warum oder akzeptieren.https://avrhelp.mcselec.com/index.html?config_lcdpin.htm
Genau so habe ich es ZUERST gemacht. Erst DANN habe ich mir Beispiele
auf Webseiten angeschaut. Erst ZULETZT herumprobiert, was schon so
manches Mal zum Erfolg führte. Wäre nicht das erste Mal wenn in einer
Dokumentation Fehler sind.
> 0der suchst weiter in irgendwelchen schnöden Foren rum
Also ich finde dieses Forum nicht schnöde.
Tim D. schrieb:> Strom war noch das Stichwort.
Hi,
die Diskussion um die vernünftigste Beschaltung der unbenutzen
Datenleitungen ist wieder einmal aus der Gruft gekommen.
Also,
da ich bei meinen Rantastversuchen damals nicht wusste, ob nicht ein
Fehler im Programm mir die Ports des µC auf ein "read", also Ausgang
geschaltete Display Datenportbit eine Kollision verursacht, hatte ich
sicherheitshalber einen Widerstand gegen GND geschaltet. Hatte noch in
Erinnerung, dass man offene Eingänge bei CMOS ICs (OP Amps) tunlichst
vermeiden sollte.
Direkt egen GND geschaltet würde also bei "read" ein satter Kurzschluss
entstehen. Der Widerstand begrenzt dann den vermeintlichen
Kurzschluss-Strom.
Um es kurz zu machen:
Das Ergebnis dieser Diskussion war nun, dass man diese Ports tunlichst
unbeschaltet lassen sollte. Also nicht direkt an GND oder Vcc. Nicht
über Widerstände etc...Ja, keine Regel ohne Ausnahme: Es gibt Ausnahmen,
das steht aber im Datenblatt dann auch als entsprechender Hinweis ganz
unübersehbar drin.
ciao
gustav
Hallo zusammen, hallo Tim
Ich sehe auf den Fotos, dass du das Board von Roland Walter benutzt.
Habe ich auch, und es war kein Problem, eine POLLIN LCD mit BASCOM zum
Arbeiten zu bringen. Wenn du schreibst, dass es mit Great Cow Basic
klappt aber mit BASCOM nicht, kann der Fehler doch nur im Quellcode
liegen.
Lass jemand anderen ein Auge darauf werfen, nach zigmal ist man selbst
blind!
73
Wilhelm
Hi,
sowas finde ich im Netz:
'LCD Test
'--------------------------------------------------------------
$regfile = "m8def.dat" 'ATMega 8L
$crystal = 4000000 'Quarz: 4
MHz
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 ,
Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7
Config Portd = &00000000
Config Portd = Output
Config Lcdbus = 4
Config Lcdmode = Port
Do
Lcd "Test"
Loop
End
ciao
gustav
P.S:
und ASM
AT90S8535 memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x00025a 602 0 602 8192 7.3%
[.dseg] 0x000060 0x000060 0 0 0 512 0.0%
[.eseg] 0x000000 0x000000 0 0 0 512 0.0%
Assembly complete, 0 errors. 0 warnings
Begriff "spiegelverkehrt" natürlich durch umgedrehte Reihenfolge zu
ersetzen. OK ok, man kann die Hälfte eindampfen.
Aber das war das erste Programm, mit dem ich ein LCD zum Laufen bekam.
Warum sollte das beim TO nicht auch klappen?
Karl B. schrieb:> Direkt egen GND geschaltet würde also bei "read" ein satter Kurzschluss> entstehen.
Ein oft wiederholter Irrtum. Ein Blick ins Datenblatt zeigt, daß es
nicht so ist. Aber auch daran liegt es hier nicht.
Vorschlag: Vielleicht ein Tag mal etwas anderes machen, und morgen in
aller Ruhe neu prüfen.
Meiner Meinung nach fehlt ein :
Config PortB = Output
in Deinem Quelltext. Es wird zwar bei MSC nicht erwähnt, aber ich habe
die Erfahrung gemacht, dass die MSC-Lib mit diesem Config in Bascom,
egal welches LCD, sicher funktioniert.
Ist ja zum testen schnell mal eingetippt.
Steffen
m.n. schrieb:> Karl B. schrieb:>> Direkt egen GND geschaltet würde also bei "read" ein satter Kurzschluss>> entstehen.>> Ein oft wiederholter Irrtum. Ein Blick ins Datenblatt zeigt, daß es> nicht so ist.
Zeig mal!
Vieleicht hat das Display auch schon einen "Weck".
Ich würde ein Neues verwenden um das auszuschließen.
Die gibt es ab ca. 4 Euro in der Bucht.
Danach würde ich ein erprobtes(!) Beispiel von der MCS Homepage
nehmen und das in Ruhe noch einmal durchgehen.
Auch wenn Du Dich mit C und Arduino nicht anfreunden kannst,
für Testzwecke würde ich die Arduino IDE installieren,die passende
Lib über "Bibliotheksverwalter" suchen und einbinden und Dein jetziges
Display damit testen um einen Hardwareschaden auszuschließen.
Ein passender "Nano" bekommst Du auch schon für ein paar Euros.
Der Lib liegen einige geteste Beispiele bei und wenn Du diese 1:1 incl.
korrekter Hardwareanbindung aufbaust,geht das auch.
Und keine Angst, für diesen ersten Test brauchst Du kein C können -
ein einfaches "ausprobieren" reicht aus.
Ein Hinweis noch: wenn das Display nur an 5V angeschlossen ist,müssen
schwarze Klötzchen zu sehen sein. Eventuell musst Du mit den
Kontrasttrimmer "spielen" um diese auch sehen zu können(ebenso muss dass
Backlight sichtbar sein).
Gerhard O. schrieb:> Bei Dir: Config Lcd = 16 * 2
Sowas ist IMMER verboten. Das wird als Rechnung erkannt von JEDEN
Basic-Compiler. !!!!
Wenn überhaupt muss das Syntax-Richtig heissen
Config Lcd = 16x2
Ich persönlich würde dir aber zu B4R ( www.b4x.com ) raten. Da ist das
Leben einfacher. ;) Grund der macht Basic-Code zu Arduino Code. Der Chip
ist relativ gesehen völlig egal. Hauptsache die Eigenschaften und Pins
passen. ;)
Davon abgesehen ist es kostenlos. ;)
Tim D. schrieb:> Mir gelingt es einfach nicht unter Bascom ein 1602 Display an einem> ATmega8535 zum Laufen zu bekommen.
Dann guck nach, woran das liegt.
Häng einen LA auf die Schnittstelle und guck dir an, ob die Signale, die
zum Display geschickt werden, den Vorgaben im Datenblatt entsprechen.
Bei Anlegen der Stromversorgung ohne der Initialisierung muss die
obere Reihe des Display graue Klötzchen anzeigen. Wenn das nicht der
Fall ist, prüfe Stromversorgung und Kontrast-Spannung.
Was die Pinbelegung des Display angeht, schaut man normalerweise ins
Datenblatt. Ich habe zwei Auszüge Auszug angehängt. Im gesamten Dokument
steht nirgendwo, dass man im 4-Bit Modus die Pins DB0-DB3 anschließen
soll. Der Display Controller hat intern einen Pull-Up Transistor, der
für definierte Zustände sorgt.
> Config Lcd = 16 * 2https://avrhelp.mcselec.com/index.html?config_lcd.htm sagt "16x2"
https://avrhelp.mcselec.com/index.html?lcd4busy.htm sagt "16*2"
Man bemerke auch den Vermerk "code tested on a 8515". Der ist ja dem
8535 sehr ähnlich.
Die Doku ist insgesamt grauenhaft und die Libraries sind offenbar nicht
Open-Source. Wer tut sich das freiwillig an?
Mit der lcd4busy.lib hab ichs jetzt hinbekommen. Leider muss ich jetzt
weg, ich poste aber später noch den Code und gehe auf die anderen
Antworten ein.
Ich habe nicht alles gelesen, aber in deinem ersten Post fehlt auf alle
Fälle das Setzen des PortB auf Output
Config PORTB=Output
Und dann die Frage, hast du die richtige Spannung am Kontrast-Pin Vo? In
deinem Bild sind alle Ziffern Pechschwarz.
So habe ich jetzt einen Text auf das Display bekommen. Ich hab meine
Schaltung umgebaut, das R2R-Netzwerk einseitig weg gelötet (war eh nur
ein Probeaufbau) und die Anschlüsse des Displays alle auf Port C gelegt.
D0-D3 sind nicht verbunden. Die Lib lcd4busy_anypin funktioniert leider
nicht mit dem 8535, so dass alle Pins am selben Port angeschlossen sein
müssen.
1
$lib"lcd4busy.LBX"
2
$regfile="m8535.dat"
3
$crystal=8000000
4
5
ConfigLcd=16*2
6
Const_lcdport=Portc
7
Const_lcdddr=Ddrc
8
Const_lcdin=Pinc
9
Const_lcd_e=1
10
Const_lcd_rw=2
11
Const_lcd_rs=3
12
13
Cls
14
Locate1,1
15
Lcd"Es funktioniert!"
Karl B. schrieb:
Angehängte Dateien:
aaaaa.asm (10 KB) | Codeansicht
Vielen Dank. Mein Display funktioniert zwar jetzt, aber in ruhiger
Minute werde ich mal versuchen deinen Code einzubinden.
Steffen S. schrieb:> Config PortB = Output
Die setzt Config Lcdpin automatisch. Aber ich hatte es noch mal versucht
die Ports vorher entsprechend zu setzen, ohne Erfolg.
ohne Worte schrieb:> Ein Hinweis noch: wenn das Display nur an 5V angeschlossen ist,müssen> schwarze Klötzchen zu sehen sein.
Über ein Poti. Wenn ich es voll aufdrehe, sprich auf 5V, dann sind die
schwarzen Felder zu sehen.
Schlaumaier schrieb:> Config Lcd = 16x2
Das scheint tolerant zu sein, jetzt wo es funktioniert, ist es egal ob
ich
1
16*2,16*2oder16x2
eingebe
> In der Fall i2c ;)
Das möchte ich als nächstes versuchen. Ich habe zu dem Display auch eine
I2C-Adapterplatine.
Stefan ⛄ F. schrieb:> Im gesamten Dokument> steht nirgendwo, dass man im 4-Bit Modus die Pins DB0-DB3 anschließen> soll.
Soll man ja auch nicht.
> Die Doku ist insgesamt grauenhaft und die Libraries sind offenbar nicht> Open-Source. Wer tut sich das freiwillig an?
Da stimme ich dir zu. In der kostenpflichtigen Vollversion soll man
immerhin den Quellcode einsehen können. Basic ist für mich halt leicht
zu verstehen, ich hätte nur nicht gedacht, dass man so schnell an die
Grenzen stößt, weil Bascom ja immer mal wieder so hochgelobt wird.
Hermann W. schrieb:> Ich habe nicht alles gelesen, aber in deinem ersten Post fehlt auf alle> Fälle das Setzen des PortB auf Output> Config PORTB=Output> Und dann die Frage, hast du die richtige Spannung am Kontrast-Pin Vo? In> deinem Bild sind alle Ziffern Pechschwarz.
Beides beachtet, siehe weiter oben in dieser Antwort
Tim D. schrieb:> wollte erst mal unter Bascom arbeiten,
Das solltest Du überdenken, C++ ist freie Software und weitaus
zukunftsträchtiger.
Tim D. schrieb:> Das möchte ich als nächstes versuchen. Ich habe zu dem Display auch eine> I2C-Adapterplatine.
Da hast Du den nächsten Spaß: Es gibt zwei Varianten des PCF8574 mit
unterschiedlichen Adressen, China-üblich 0x27 oder 0x3F.
Obendrein sind nicht alle China-Boards identisch beschaltet.
------------------------------------------------------------------------
--
Was manchmal auch hilft:
-einfach mit Haken bei der CLK8-Fuse den Takt auf 1/8 verringern
-größere Abblock-Cs direkt am Display und/oder am uC anbringen (kein
Witz)
Tim D. schrieb:>> Config Lcd = 16x2>> Das scheint tolerant zu sein, jetzt wo es funktioniert, ist es egal ob> ich16*2, 16 * 2 oder 16x2> eingebe
Vermutlich ist nur die erste Ausführung richtig und bei den falschen
Varianten wird als Standardvorgabe ein 16x2 Display eingestellt.
Tim D. schrieb:> Die 4 offenen Datenpins Pins habe ich jetzt halt auch noch auf Masse> gesteckt.
Das richtet wenigsten keinen Schaden an. Guck ins Datenblatt von Display
Controller. Da steht, wie mit den Pins im 4-Bit Modus umzugehen ist.
Hast du jetzt Mal die Signale angesehen, mit denen du das Display
versuchst zu steuern?
Tim D. schrieb:> ATmega8 mit Bascom
Lustig ist, dass es mit dem Lochraster-Aufbau scheinbar funktioniert -
mit der "fertigen" Platine aber scheinbar nicht. Gibt es da wohl
Unterschiede?
Tim D. schrieb:> Die Lib lcd4busy_anypin funktioniert leider nicht mit dem 8535
Liest du eigentlich die Doku? Ich zitiere mal den ersten Satz daraus:
"This LCD driver is intended to be used with the OLED LCD RS0010."
Hugo H. schrieb:> Lustig ist, dass es mit dem Lochraster-Aufbau scheinbar funktioniert -> mit der "fertigen" Platine aber scheinbar nicht. Gibt es da wohl> Unterschiede?
Kapazitäten und Kontaktwiderstände. Wenn das Timing grenzwertig ist,
kann das den Unterschied ausmachen. Außerdem sind die Displays nicht
alle gleich, sondern nur mehr oder weniger kompatibel zum HT44780 Chip.
Das Original gibt es ja gar nicht mehr.
Stefan ⛄ F. schrieb:> Liest du eigentlich die Doku? Ich zitiere mal den ersten Satz daraus:> "This LCD driver is intended to be used with the OLED LCD RS0010."
Autsch, das habe ich glatt übersehen. Ich habe verdammt viel gelesen an
dem Abend.
> Hugo H. schrieb:>> Lustig ist, dass es mit dem Lochraster-Aufbau scheinbar funktioniert ->> mit der "fertigen" Platine aber scheinbar nicht. Gibt es da wohl>> Unterschiede?
Ja, die Prozessoren :) Das hatte aber nichts mit dem Aufbau zu tun. Das
Display ging mit beiden Platinen nur mit Great Cow Basic. Jetzt geht es
mit beiden Platinen auch mit Bascom.
Hugo H. schrieb:> Kinderfrage: Und warum?
Weil ich es jetzt mit einer Bibliothek gemacht habe. Warum es mit der
Internen LCD-Funktion nicht geht, habe ich nicht herausgefunden.
Manfred schrieb:> Es gibt zwei Varianten des PCF8574 mit> unterschiedlichen Adressen, China-üblich 0x27 oder 0x3F.
Abgesehen davon, ob es sich um den PCF8574 oder den PCF8574A mit
Basisadresse 0x20 bzw. 0x38 handelt, wird die Slave Adresse durch die
Beschaltung der Pins A0 bis A2 festgelegt. Je nach Verdrahtung und
IC-Typ besitzt der Chip dann eine I2C-Adresse im Bereich 0x20 ... 0x27
bzw. 0x38 ... 0x3F.
Wolfgang schrieb:> Abgesehen davon, ob es sich um den PCF8574 oder den PCF8574A ... handelt
Ich denke nicht, dass hier Port-Expander eine Rolle spielen.
Tim D. schrieb:> Mir gelingt es einfach nicht unter Bascom ein 1602 Display an einem> ATmega8535 zum Laufen zu bekommen.
Ich habe erst gestern ein Display getestet, hatte aber keinen 8535,
sondern
einen ATMEGA 16.
siehe hier:
' Display Powertip PG16032 Pollin
' 26.02.2022
' Display hat ST7920 Chip
' Ausgabe auf LCD PG16032 160 x 32 Pixel
' Text Modus Kompatibel zu HD44780
' Display hat 2 Zeilen 20 Zeichen pro Zeile
'
' Bascom Version 2.0.8.5
'
$regfile = "m16def.dat" ' ATMEGA 16
$crystal = 11059200 'Quarz 11,059200 MHz
$hwstack = 200
$swstack = 100
$framesize = 64
'
' LCD Display konfigurieren
'
Config Lcdbus = 4 ' LCD 4 Bit Modus
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 ,
Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 40x2 ' Display 40 Zeichen 4 Zeilen
Cursor off Noblink
CLS
'
'I2C konfigurieren
'
$lib "i2c_twi.lbx" ' Hardware TWI I2C
' SCL pin = Port C.0 SCL SDA TWI
' SDA pin = Port C.1
Config Twi = 100000 ' I2C Clock = 100 KHz
I2cinit ' I2C Inizialisieren
'
Do
'
I2cstart ' PCF8574LED 0 aus
I2cwbyte &H40 ' Adresse PCF 8574
I2cwbyte &H00
I2cstop
'
Locate 1,1
LCD "0123456789ABCDEFGHIJ" ' 20 Zeichen pro Zeile
'
Locate 4,1
LCD "Powertip PG16032LRU" ' Zeile 2 muss als Zeile 4 addressiert
werden.
'
Waitms 500
I2cstart ' PCF8574LED 0 ein
I2cwbyte &H40
I2cwbyte &H01
I2cstop
Waitms 500
Loop
End
Ein Hinweis von mir, schau dir mal die Hilfe in Bascom an.
Thema LCD und Config LCD.
Ich wollte nur mal testen ob so ein Display mit ST7920 funktioniert.
Das nächste wäre der Grafikmodus des Displays, da habe ich aber nichts
wirklich brauchbares gefunden.
Schlaumaier schrieb:> Wenn überhaupt muss das Syntax-Richtig heissen>> Config Lcd = 16x2
Es spielt keine Rolle ob mit x oder * das beschrieben wird.
Es gilt nur Zeichenzahl Zeilen.
LCD Value
16x1 161
20x2 202
40x2 402
usw.
So wie es aussieht wird die LCD Definition nach einen Value gewandelt.
Siehe auch Hilfe in Bascom.
Stefan ⛄ F. schrieb:> Was die Pinbelegung des Display angeht, schaut man normalerweise ins> Datenblatt. Ich habe zwei Auszüge Auszug angehängt. Im gesamten Dokument> steht nirgendwo, dass man im 4-Bit Modus die Pins DB0-DB3 anschließen> soll.
Das ist mir auch schon aufgefallen, ich mache es immer so, das D0 - D3
per
10K auf GND gelegt werden.
Ich hatte mal ein Display das mit offenen D0 - D3 nicht funktionierte.
Es gibt auch Displays wo der Kondensator GND VCC nicht bestückt ist.
Das kann auch Probleme machen wenn die Leitungen länger sind.
Ich habe dann einen 1µF 0805 drauf gelötet und siehe da alles Gut.
Manfred schrieb:> Da hast Du den nächsten Spaß: Es gibt zwei Varianten des PCF8574 mit> unterschiedlichen Adressen, China-üblich 0x27 oder 0x3F.
Gut zu wissen. Das ist natürlich toll, mit so was kann man sich als
Anfänger zu Tode suchen.
Irschenberg A8 schrieb:> Ich habe erst gestern ein Display getestet, hatte aber keinen 8535,> sondern> einen ATMEGA 16.
Danke für den Beispielcode. Dann werde ich auch mal den I2C-Adapter
testen.
Hugo H. schrieb:> Hugo H. schrieb:>> Kannst Du auch veröffentlichen, welche?>> Vielleicht war es ja schlicht ein Fehler im Layout ... :-)
Du solltest den Thread auch mal ganz durchlesen.
Deine Frage zur der Bibliothek:
Beitrag "Re: 1602 LCD mit ATmega8535 und Bascom läuft nicht"
Tim D. schrieb:> Gut zu wissen. Das ist natürlich toll, mit so was kann man sich als> Anfänger zu Tode suchen.
Weshalb ich grundsätzlich die Arduino-IDE nehme. Und dort ein Nano mit
nur EINEN Teil am i2c-Bus anklemme. Dann lade ich den i2c-Scanner hoch
und schaue im Seriell-Monitor nach welche Adresse der mir als Belegt
anzeigt.
Auf das Problem mit der Grund-Adresse bin ich auch mal bei ein paar
China-Chips herein gefallen.
So ganz nebenbei. Die Adresse ist NICHT fest, du kannst sie in einen 8
Bit-Bereich von der Grundadresse verschieben. Musst nur die passen PINS
A0 bis A2 gegen Grund verbinden.
Vielleicht gibt es unter Bascom irgendwo auch ein Code der als
i2c-Scanner funktioniert.
Da ich keine 100 Euro ausgeben wollte, habe ich mich schnell von Bascom
verabschiedet, deshalb weiß ich das auch nicht.
So ein Scanner-Prg. ist eh immer was feines. Dann sucht man sich nicht
an so ein Mist ein Wolf.
Und Displays der 160x Serie würde ich eh immer ein fertigen Adapter für
1.50 Anlöten, und dann das ganze via i2c anklemmen. Aber WARNUNG: Du
brauchst dann auch eine I2C-Libs dafür. Die gibt es unter Bascom das
weiß ich. Hab ich bei der 2-kb-Code-Demo-Version mal gesehen.
Krass wie da mangels interesse einfach mit fremdem code rumgeeiert wird.
So wird das natuerlich nie etwas. LCDs sind relativ einfach. Enfach
fiese Punkte beachten :
- Der Kontrast muss richtig eingestellt sein. Dass man eine schwarze
Zeile sieht.
- Der Reset ist jeweils abarig lang. zB 100ms
- Das Read Gezerre mit Ready ist Quatsch, macht alles nur sinnlos
kompliziert. Das sollte man sich schenken. Besser nur Schreiben und
dazwischen warten. Ich schreibe jeweils pro Timer Tick, bei mir alle
10ms, ein Zeichen oder Controlbyte. Dh die 32 (2x16) character werden in
etwa 340ms, incl 2 mal Cursorposition auf anfangs Zeile einmal neu
beschrieben.
- Deswegen habe ich einen Display buffer von 2x16char, welcher
periodisch, ans Display geschrieben wird.
Jetzt muss man nur noch die Signale mit dem Oszilloskop ueberpruefen
koennen udn der Erfolg ist garantiert.
Pandur S. schrieb:> - Der Kontrast muss richtig eingestellt sein. Dass man eine schwarze> Zeile sieht.
Weshalb ich den China-Adapter so liebe. ca. 1.50 Euro. Nur falsch
eingestellt ausgeliefert. I2c-scanner für Adresse drüber. Code senden,
an der Schraube drehen bis ich was sauber und klar lese. FERTIG.
https://www.christians-shop.de/I2C-IIC-Serielle-Schnittstelle-fuer-LCD-Display-1602-und-2004
Das Teil meine ich. Man muss halt nur löten können. ;)
Nicht Tausend, sondern Millionensassa schrieb im Beitrag #6989785:
> Du machst den Eindruck eines selbstgerechten Besserwissers,
Das übliche - Fehler gemacht - nicht zugeben - und irgendetwas
vorschieben.
Nicht Tausend, sondern Millionensassa schrieb im Beitrag #6989785:
> Wenn bei 1000 Anderen das Programm und der RICHTIGE> Aufbau der Schaltung funktionieren, bei Dir aber nicht, dann gibt Dir> das nicht zu denken.
Kennst du wirklich 1000 Leute, bei denen es funktioniert?
Schlaumaier schrieb:> Vielleicht gibt es unter Bascom irgendwo auch ein Code der als> i2c-Scanner funktioniert.
Selbstverständlich gibt es einen Code für einen I2C Scanner.
Siehe Anhang.
Bei Bedarf an anderen Controller, LCD, Quarz anpassen!
Nicht Tausend, sondern Millionensassa schrieb im Beitrag #6989785:
> Tim D. schrieb:> Du machst den Eindruck eines selbstgerechten Besserwissers, der keinen> Fehler zugeben will.
So ein Unfug, ich habe nirgendwo behauptet dass der Fehler nicht bei mir
liegt. Ich habe ihn nur nicht gefunden. Gib mir Deine Adresse, dann
schicke ich dir mein Programm und die verdrahtete Platine zu. Als
Millionensassa findest Du den Fehler sicher im Handumdrehen.
Hugo H. schrieb:> Das übliche - Fehler gemacht - nicht zugeben - und irgendetwas> vorschieben.
Das Übliche ist, dass in jedem Thread früher oder später so Klugscheißer
wie du da herkommen.
Tim D. schrieb:> Warum es mit der> Internen LCD-Funktion nicht geht, habe ich nicht herausgefunden.
Ich habe es doch schon gesagt. Es fehlt Config PortB=Output
Default der Ports ist Input, dann kommt am Display nichts an.
Bei mir geht das immer.
Mit einem Tag Abstand habe ich das Display an einen anderen Port nochmal
neu angesteckt und den Code neu eingetippt. Das Display bleibt leer.
Nutze ich die Lib funktioniert das Display.
Irgendwer fragte mich nach der Bascom-Version, das hatte ich bei den
vielen Beiträgen leider vergessen zu beantworten: Demo-Version 2.0.7.9,
Build 2.0.7.9.200. Die Demo ist leider uralt.
Tim D. schrieb:> Das Übliche ist, dass in jedem Thread früher oder später so Klugscheißer> wie du da herkommen.
Allahopp - Laberkopp.
Mehr ist dazu nicht zu sagen.
Hugo H. schrieb:> Allahopp - Laberkopp.>> Mehr ist dazu nicht zu sagen.
Du disqualifizierst dich gerade selbst. Ich habe mal die Browsersuche
benutzt. Du hast in diesem Thread nichts beigetragen außer Fragen zu
stellen, die weit oben im Thread schon längst mehrfach beantwortet
wurden. Und dann machst du mich dumm an und wunderst dich über Konter.
Ach was soll's, Schwamm drüber...
H. H. schrieb:>> Es fehlt Config PortB=Output>> Nein, das erledigt "Config Lcdpin" gleich mit
Das ist aber nicht in der Bascom-Reference beschrieben. Unter Config
Lcdpin habe ich es jedenfalls nicht gefunden. Wenn das trotzdem so ist,
bleibt es Glücksache, ob das in allen Versionen funktioniert.
Hi
>Du disqualifizierst dich gerade selbst. Ich habe mal die Browsersuche>benutzt.
Herr Gott nochmal. Dann schreib einfach deine Lib selber. Habe ich schon
vor 25 Jahre gemacht. Dann weist du wenigstens was drin steht und wie
man sie benutzt.Dazu reicht reicht das Datenblatt des Displaycontrolers
(HD44780) völlig aus.
MfG Spess
Hermann W. schrieb:> H. H. schrieb:>>> Es fehlt Config PortB=Output>>>> Nein, das erledigt "Config Lcdpin" gleich mit>> Das ist aber nicht in der Bascom-Reference beschrieben. Unter Config> Lcdpin habe ich es jedenfalls nicht gefunden. Wenn das trotzdem so ist,> bleibt es Glücksache, ob das in allen Versionen funktioniert.
Du musst noch nicht einmal "Config Lcd" verwenden, und dennoch
funktioniert das LCD. Dafür gibts die Options Settings, und das steht
auch so im Handbuch.
Und das ist schon seit ewigen Zeiten genau so.
Interessant hier.
Ich hatte vor über zehn Jahren mal sowas gemacht, und mußte mich erst
ein paar Stunden einlesen.
Warum hast du nicht LCD.BAS genommen?
Ich habe das damals als Vorlage benutzt und eigentlich keine
Schwierigkeiten mit der Umstellung auf den MEGA-8 gehabt.
Da ist doch alles schön dokumentiert.
Tim D. schrieb:> Irgendwer fragte mich nach der Bascom-Version, das hatte ich bei den> vielen Beiträgen leider vergessen zu beantworten: Demo-Version 2.0.7.9,> Build 2.0.7.9.200. Die Demo ist leider uralt.
Ist wirklich etwas alt und die neue Version schnell heruntergeladen.
Die .LIB usw. sind da vollständig enthalten.
Viel ist nicht mehr geschehen.
Ich habe auch noch die 2081, mal sehen, ob ich ein Update auf die neue
2085 erhalte.
Die meisten LCD-Inits sind falsch und funktionieren nur zufällig, weil
viele das Datenblatt nicht richtig lesen können.
Auch wenn es nicht explizit dasteht, muß an den roten Pfeilen weiterhin
je 100µs gewartet werden. Erst an den blauen Pfeilen darf man Busy
testen oder muß entsprechend Table 6 warten.
Genau das ist gemeint mit dem Text im Kasten: "BF can be checked after
...".
Peter D. schrieb:> Die meisten LCD-Inits sind falsch und funktionieren nur zufällig, weil> viele das Datenblatt nicht richtig lesen können.
Ähhh... Ja - Du hast recht!
Ich hab das mal aus Spaß, in meine Lib eingefügt und Oh Wunder es
funktioniere genau so, wie es im Dabla steht! Da ist kein Fehler
enthalten.
Wenn, dann glauben evtl. viele, ab dem roten Pfeil muss man garnicht
warten?-/
Hi,
wer redet denn vom Busy-Flag.
Für die Standardanwendungen reicht es allemal aus, wenn die
Anzeigeroutine
alle halbe Sekunde refreshed wird. Ein paar Millisekunden mehr oder
weniger machen den Kohl nicht fett.
Das war aber wohl nicht die Aussage von @Peda:
Auszug aus dem Originaldoku des HD44780
Die Verarbeitungszeiten hängen vom Takt ab.
Und der kann schon mal etwas Toleranzbreite haben.
Es darf ruhig gerade bei den allerersten Befehlen ein wenig mehr auf die
Schippe gelegt werden.
ciao
gustav
Karl B. schrieb:> Das war aber wohl nicht die Aussage von @Peda:
Oh so.....?-O
Peter D. schrieb:> Erst an den blauen Pfeilen darf man Busy> testen
Das ist schlichtweg falsch³!
Irschenberg A8 schrieb:> Selbstverständlich gibt es einen Code für einen I2C Scanner.>> Siehe Anhang.
Fein, dann soll der TO sich dein Code downloaden und laufen lassen. Löst
viele Problem mit "was habe ich für eine Adresse".
Wie gesagt ich traue keinen, und lasse das immer laufen. Ich weiß zwar
in 99% aller Fällen was ich zu erwarten habe, aber da gibt es ja das 1ne
Prozent. ;) Und das ärgert mich dann immer ;)
Aber @TO. Schau dir mal www.b4xcom (da b4r) an. Ist Visual-Basic für
Arduinos. Kostenlos und NICHT irgendwie begrenzt. Immer auf den
TOP-Stand.
Und du kannst (notfalls mit einen Warper) ALLE !!! Libs von Github
nutzen. Der Prozessor ist auch egal. Er muss sich nur mit der
Arduino-IDE ansteuern lassen.
Ich programmiere alle meine Anwendungen damit und das passt prima.
Teo D. schrieb:> Das ist schlichtweg falsch³!
Hi,
probiers aus.
Ich schau aber sicherheitsahalber nochmal in der Original-Doku nach.
Die Sequenz der "Dreimal Schwarzer Kater" muss vorher laufen mit den
"relativ" langen Verzögerungsschleifen im Programm.
Vorher geht kein Busy.
Das liegt daran, weil das Display sich ja schon im POS selber
initialisiert aber sinnigerweise das Display auf OFF stellt.
Und die interne Initsequenz initiaisiert standardmäßig auf 8 Bit.
Dann muss nochmal eine weitere Routine laufen.
Und darauf bezieht sich das Datenblatt.
ciao
gustav
@Karl B.
Lies erst noch ein zwei mal, alles was dazu von Peter u. mir geschrieben
wurden durch und gug dir auch die Bildchen an! Evtl. verstehst du es ja
dann.
Teo D. schrieb:> Evtl. verstehst du es ja> dann.
Es ist so oberflächlich schematisch dargestellt.
Das ist etwas, was mich am Anfang, zu dem ich mich mit LCDs
beschäftigte, immer schon massivst geärgert hat.
Die Schemas geben nicht die tatsächliche Programmier-befehlangabe an.
Also, stünde hinter jedem
Kästchen
Verzögerungsschleife (Zeitdauer)
und
Enable Impuls
(Execution Befehl)
Und nicht die Kästchen mit den
Auswahlkriterien so untereinander, käme überhaupt kein Zweifel auf.
Ob da eine Busyabfrage möglich ist,
muss ich nochmal nachprüfen.
Also, Zustand Bit 7 abfragen.
Ob das Ganze dann was bringt, steht auf einem anderen Blatt.
Jedenfalls wird es erst so richtig haarig, wenn das Dummybyte nach
4-Bit-Umschwenk bei der Busyflagabfrage vergessen wurde.
Dann kann ich meine Initialisierung in der Pfeife rauchen.
ciao
gustav
Karl B. schrieb:> Ob da eine Busyabfrage möglich ist, ....
Ich schrub doch, das läuft bei mir, auf div. Module.... Zum Spaß ! :)
Bringen tut das nüscht bis fast Null. :DDD
Hat mal einer ne Zeitmaschine? Ich müsst grad mal so 1h zurück.
1t Schlacke auf meinen verwesenden Körper. Peter hat natürlich!
S O R R Y
Ich hab da grad mal in meinen ach so gut funktionierenden Code gegut.
Tja und siehe da, es is genau so wie Peter es beschreibt.
Damals war ich auch unsicher und hab es deshalb ausprobiert, nur dachte
ich, das ich damals anders dachte... ach scheiß.. :( Sorry
Ich bind dann mal weg und buddel mir'n Loch....
Teo D. schrieb:> Tja und siehe da, es is genau so wie Peter es beschreibt.
Hi,
mach Dir nichts draus.
Karl B. schrieb:> Die Schemas geben nicht die tatsächliche Programmier-Befehlangabe an.> Also, stünde hinter jedem> Kästchen> Verzögerungsschleife (Zeitdauer)> und> Enable Impuls> (Execution Befehl)> Und nicht die Kästchen mit den> Auswahlkriterien so untereinander, käme überhaupt kein Zweifel auf.
Bei den LCDs hat man ja noch die Chance, die Sache experimentell
auszubaldovern. Und dann schauen, ob's geht oder nicht.
Wie lange ich am Anfang gerade mit den LCD-Initialisierungen rumgehext
hatte, glaubt mir kein Mensch.
Also, die Zeitschleifen benutzten bei mir dieselben Temporärregister wie
die anderweitig benötigten "Variablen- ,Argumente-,
Arithmetics"-Register.
Und dann Push und Pop vergessen. Kann nicht.
Aber bis man da drauf kommt....
ciao
gustav
Ich hab hier mal meine einfache Lib beschrieben:
https://www.avrfreaks.net/forum/tutc-lcd-tutorial-1001
Der Grund für das 3-malige Setzen in den 8Bit-Mode ist folgender:
Der AVR kann ja ein Reset nicht nur bei Power-On ausführen, sondern z.B.
über eine Resettaste vom Benutzer. In diesem Fall kennt die CPU den
aktuellen Zustand des LCDs nicht. Es kann z.B. schon im 4Bit Mode sein
und auf das 2. Nibble warten. Daher muß man es erstmal in einen
definierten Mode setzen, um es dann zuverlässig auf 4Bit setzen zu
können.
Man kann es mal durchspielen. Erst nach dem 3. Befehl 8Bit-Mode ist es
sicher aus jedem anderen Zustand auch im 8Bit-Mode.
Fehlerhafte Inits können zwar beim Power-On scheinbar funktionieren,
aber nach einem externen Reset das LCD nur noch Müll anzeigen lassen.
Karl B. schrieb:> Bei den LCDs hat man ja noch die Chance, die Sache experimentell> auszubaldovern.
Da bin ich absolut kein Fan davon. Erst wenn das Datenblatt erkennbar
fehlerhaft ist, würde ich zu diesem Notnagel greifen. Das Datenblatt hat
bei mir immer Vorrang.
Karl B. schrieb:> Wie lange ich am Anfang gerade mit den LCD-Initialisierungen rumgehext> hatte, glaubt mir kein Mensch.> Also, die Zeitschleifen benutzten bei mir dieselben Temporärregister wie> die anderweitig benötigten "Variablen- ,Argumente-,> Arithmetics"-Register.
Da hat man es unter C deutlich bequemer und sicherer. Man übergibt
einfach dem Macro _delay_us() die gewünschte Wartezeit in µs und die
wird eingehalten (Interrupts können sie nur verlängern). Das verkürzt
schonmal deutlich die Entwicklungszeit für die LCD-Lib.
Peter D. schrieb:> Der Grund für das 3-malige Setzen in den 8Bit-Mode ist folgender:> Der AVR kann ja ein Reset nicht nur bei Power-On ausführen, sondern z.B.> über eine Resettaste vom Benutzer.
Hi,
das Problem ergibt sich immer, wenn LCD und µC an derselben 5V Vcc
angeschlossen sind und zusammen ein- und ausgeschaltet werden.
Das LCD hat unter Umständen nicht seinen internen POS zu Ende gebracht,
da sendet eine Initialisierungsroutine vom µC schon die ersten Befehle.
Diese Setzzeit wird vom Init-Programm meistens durch eine programmierte
größere Verzögerungszeit abgefangen. Bedeutet aber nicht immer 100&-ig,
dass das LCD schon für externe Befehle zugänglich ist und diese auch
richtig interpretieren kann.
Das Datenblatt dazu hatte ich oben schon einkopiert.
https://www.mikrocontroller.net/attachment/548702/HD44780_POS.jpg
Übrigens ist das einer der Gründe, wieso man vor eine
LCD-Spannungsversorgung keinen allzu großen Elko schalten sollte.
Zum Beispiel 4700 µF direkt am LCD - und die Initialisierung klappt
nicht mehr. Die Zeit zum Erreichen der 4,5V ist länger als die
geforderten 10 ms. (Das macht man ja auch nicht, dient aber als
Beispiel, was passieren kann.)
Auch das meinte ich mit "experimentell ausbaldovern".
ciao
gustav
So neuer Tag, weniger Kopfschmerzen und schon rudere ich wieder zurück.
:/
So wie im Dala beschrieben "BF cannot be checked before this
instruction.
Function set (Interface is 8 bits long.)" (Erste grüne Linie) kann man
bereits ab da, das BF abfragen aber halt im 8Bit Modus (was in der
Praxis unerheblich ist, dann wird halt nur bei jeden zweiten Lesezugriff
abgefragt:).
Erst ab der zweiten Linie, muss man das BF im 4Bit-Mode abfragen.
Die BF Abfrage ist hier nur ein stupider Delay Ersatz, blockiert einfach
nur.
Läuft mit diversen Displays.... und auch nach einem Reset, ohne Power
down.
1
voidLCD_Init(void){
2
LCD_PORT_LAT=0x03;
3
__delay_ms(15);
4
LCD_ENABLE;// 1. LCD_PORT_LAT = 0x03
5
__delay_us(5000);
6
LCD_ENABLE;// 2. LCD_PORT_LAT = 0x03
7
__delay_us(110);
8
LCD_ENABLE;// 3. LCD_PORT_LAT = 0x03
9
// Busy Flag is avoidable
10
// __delay_us(110);
11
LCD_Busy();// <-- TEST mit 2x40 Display (Laufzeit <10µs bis zum ersten Test!)
Karl B. schrieb:> Diese Setzzeit wird vom Init-Programm meistens durch eine programmierte> größere Verzögerungszeit abgefangen. Bedeutet aber nicht immer 100&-ig,> dass das LCD schon für externe Befehle zugänglich ist und diese auch> richtig interpretieren kann.
Hi,
natürlich, wenn man im µC-Programm zu dieser Phase das Bit 7 abfragt,
bekommt man ein High.
Und so lange sollte dann auch der µC keine Initialisierungsbefehle
schicken.
Der µC wird "blockiert".
Diese Art von Busy-Flag-Abfrage muss dann nicht im weiteren Programm bei
jeder Aktion wiederholt werden. Sie erfolgt einmal und wird dann
verlassen.
Unter dem Begriff Busy-Flag-Routine wird ja meistens verstanden, dass
sie immer wieder gebraucht wird, um die Befehlsverarbeitungszeit
abzuwarten ohne mit Pi mal Daumen geschätzten Verzögerungsschleifen zu
arbeiten.
Hat nur einen Haken:
R/W darf nicht festverdrahtet werden mit GND.
Ob sich der Aufwand dann lohnt, muss jeder selbst entscheiden.
Frage am Rande:
Was passiert eigentlich, wenn R/W fest auf GND verdrahtet ist und im
Programm eine Busyflag-Abfrage kommt?
Dann gibt es einen Kurzschluss, denn LCD-Port ist auf Output geschaltet?
Geht das LCD dann kaputt?
ciao
gustav
michael_ schrieb:> Ist wirklich etwas alt und die neue Version schnell heruntergeladen.
Ich will nicht die Katze im Sack kaufen und bei der Demo gibt es kein
Update. Es spräche nichts gegen einen Kauf, aber die Demo macht einen
derart schlechten Eindruck, dass ich lieber Abstand nehme.
Weißt Du oder jemand anderes, wie ich die Leerzeichen beim Editor
abstelle? Beim Einrücken mit Tabs werden diese in Leerzeichen
umgewandelt. Auf das ganze Blatt kann ich den Cursor irgendwo hin
platzieren. Das treibt mich bei jeder einzelnen Zeile in den Wahnsinn,
da der Cursor nie dort hin springt wo ich ihn benötige. Bei Great Cow
Basic ist es genau so. In den Einstellungen habe ich nichts gefunden.
Wäre toll, wenn ich es nur übersehen hätte.
Schlaumaier schrieb:> Aber @TO. Schau dir mal www.b4xcom (da b4r) an. Ist Visual-Basic für> Arduinos. Kostenlos und NICHT irgendwie begrenzt. Immer auf den> TOP-Stand.
Ich habs mir jetzt doch mal runter geladen, aber dann muss ich erst
wieder meinen Windows-Rechner hochfahren...nach Monaten :) Bevor ich es
installiere, wenn ich nichts überlesen habe, kann ich damit wirklich nur
Arduino-kompatible Boards programmieren und nicht die ISP-Schnittstelle
nutzen?
Tim D. schrieb:> Weißt Du oder jemand anderes, wie ich die Leerzeichen beim Editor> abstelle? Beim Einrücken mit Tabs werden diese in Leerzeichen> umgewandelt. Auf das ganze Blatt kann ich den Cursor irgendwo hin> platzieren. Das treibt mich bei jeder einzelnen Zeile in den Wahnsinn,> da der Cursor nie dort hin springt wo ich ihn benötige.
Ich würde es mal mit "Optionen->Umgebung->Environment->Editor"
versuchen.
Eigentlich wollte ich hier nicht zu helfen versuchen, weil Du Einer
bist, der
die Helfer noch dafür verantwortlich macht, wenn bei Dir der Fehler
zwischen Stuhllehne und Monitor sitzt....
Editor statt Konditor schrieb:> Ich würde es mal mit "Optionen->Umgebung->Environment->Editor"> versuchen.
Wo dort? Ich finde da nichts. Du weißt scheinbar selbst nicht wo.
> Eigentlich wollte ich hier nicht zu helfen versuchen, weil Du Einer> bist, der> die Helfer noch dafür verantwortlich macht, wenn bei Dir der Fehler> zwischen Stuhllehne und Monitor sitzt....
Das ist totaler Unsinn. Kannst Du mal aufhören mir Unwahrheiten
unterzuschieben. Zeig mir doch mal die Textstelle in diesem Thread, wo
ich einen anderen Nutzer dafür verantwortlich gemacht haben soll, dass
mein Display nicht funktioniert. Zeig sie mir bitte.
GOIL !
Jetzt sitzt ihr Freaks schon eine Woche an der billigsten Sache der Welt
,eines popeligen, alphanumerischen Display mit Bascom , mit den
sinnfreiesten Vorschlägen ever.
Ey , 3 Sätze !
Also Fernsehen is nen schei.... dagegen :-) :-) :-)
Tim D. schrieb:> Bevor ich es> installiere, wenn ich nichts überlesen habe, kann ich damit wirklich nur> Arduino-kompatible Boards programmieren und nicht die ISP-Schnittstelle> nutzen?
Das Prg. schreibst du in Visual-Basic Stil. Also mit .eigenschaften.
ABER du MUSS die Arduino-IDE installieren.
Der "Compiler" von b4x ist KEIN Compiler im üblichen Sinn, sondern ein
Code-WAndler. Das Ergebnis ist reinrassiger Arudino-IDE-Code. In den
passenden Verzeichnis (unter den Projekt-verzeichnis) findest du die
INO-Datei.
Also schreiben + "Compilieren" in B4R. Wenn du eins der Boards hast am
USB-Port dann kann der Code direkt auf das Board geschoben werden und
B4R komuniziert mit den Board. Ist der "compilieren und Hochladen"
Menü-Punkt in der Arduino-Ide.
ABER. Ich habe nackte Atiny-85. Da mache ich das so.
Ich "compiliere" den Code mit b4a. Dann lade ich den Code in die IDE.
Und rufe "Hochladen mit Programmer" auf. Und schon wird das mit meinen
USbas-Teil in den Atiny-85 gepumpt.
Also. Lange Rede kurzer Sinn. ALLES was du via Arduino-IDE (in
Arduino-C-COde) irgendwie in einen Chip bekommst geht auch mit B4X als
Entwickungssystem in den selben Chip. Nur das du halt in Basic
schreibst.
Das coole ist,
1. es ist Kostenlos.
2. mit B4A kannst du im selben Code-Stil (wie VB) auch Androids
programmieren.
3. Wenn du ein Ei-Teil hast, musst du ca. 100 Euro k.a. wieviel für
einen Zwischensoftware ausgeben die kommt aber vom Apfel.
Ich habe mich dafür entschieden weil ich seit VB-3.0 mit Visiual-Basic
programmiere. Der Code-Stil ist immer gleich. Nur das mal halt etwas
andere Objekte hat.
Einziger Nachteil des Ganzen. Die deutsche Abteilung der Comunity ist
nicht der Bringer bei b4R (b4A ist sie besser). Aber die Englische
Abteilung im Forum ist Klasse. Ergo. Englisch lerne oder sich mit den
übersetzer von google anfreunden. ;=) Schau es dir halt an.
Kleiner Nebenhinweis.
Das hier besprochene Problem kostet mich bei einen 160* Display am
i2c-Bus 2 Zeilen Code (' Zeile 1 + 2).
Sub Process_Globals
Public Serial1 As Serial
Public lcd As LiquidCrystal_I2C 'zeile 1
End Sub
Private Sub AppStart
Serial1.Initialize(9600)
lcd.Initialize(0x27, 16, 2) ''zeile 2
' lcd.Initialize(Adresse, Zeichen, Zeilen) <- Erklärung des Ini.
lcd.Backlight = True 'zeile 3 wenn ich will
lcd.Write("System gestartet") ' 'zeile 4 auch nur wenn ich will
end sub
FERTIG.
Haken bei der Lib LiquidCrystal_I2C nicht vergessen ;)
Bevor alle stänkern wie üblich. Ich muss mir das Leben nicht schwerer
machen als ich muss.
Schlaumaier schrieb:> Ich "compiliere" den Code mit b4a
So b4R heißen. !!
B4R = Arduino-Code
B4I = Ei-Code
b4A = Android-Code
b4J = Java-Code
Jeweils als Ergebnis.
Eine Code-Sprache min. 4 unterschiedliche Systeme. DAS ist es was mir so
gefällt. Nicht die Syntax von 1000 Sprachen lernen.
Tim D. schrieb:> Du weißt scheinbar selbst nicht wo.> Kannst Du mal aufhören mir Unwahrheiten> unterzuschieben.
Wie man in den Wald hinein ruft, so schallt es heraus.
Tim D. schrieb:> Editor statt Konditor schrieb:>> Ich würde es mal mit "Optionen->Umgebung->Environment->Editor">> versuchen.>> Wo dort? Ich finde da nichts. Du weißt scheinbar selbst nicht wo.
Oh, das tut mir wirklich leid, aber ich kann mich beim besten Willen
nicht so blöde stellen, wie es für den Umgang mit Dir erforderlich wäre.
Viel Vergnügen noch, Geistesriese!
Tim D. schrieb:> Das Übliche ist, dass in jedem Thread früher oder später so Klugscheißer> wie du da herkommen.
Merkwürdiger weise kommt man durch Fragen oft zu sinnvollen Antworten -
nicht bei Dir, Du bist "resistent". Lebe glücklich und unbedarft :-)
Schlaumaier schrieb:> Ich "compiliere" den Code mit b4a. Dann lade ich den Code in die IDE.> Und rufe "Hochladen mit Programmer" auf. Und schon wird das mit meinen> USbas-Teil in den Atiny-85 gepumpt.
Jetzt habe ich mich mal näher damit befasst. Hat etwas gedauert, weil es
leider nur unter Windows 10 läuft und ich erst einen Rechner einrichten
musste.
Arduino-IDE ist installiert und STK500-kompatibler Programmer wird
erkannt. Programmieren aus der Arduino-IDE heraus via Programmer geht
auch.
In B4R habe ich bei mir allerdings nur den Menüpunkt "Projekt ->
Kompilieren und Starten". Da wird aber verlangt, dass ich ein
Arduino-Board auswähle, was ich ja nicht habe.
Wie kompilierst du den Code?
Tim D. schrieb:> In B4R habe ich bei mir allerdings nur den Menüpunkt "Projekt ->> Kompilieren und Starten". Da wird aber verlangt, dass ich ein> Arduino-Board auswähle, was ich ja nicht habe.
NA und.
OK. zuerst einmal installiere eine ALTE !!! Version der Arduino-IDE. Ich
nutze 1.8.16 . Die läuft prima unter Win-7.
Ich bin mir nicht einmal sicher, ob die 2.* schon mit allen Libs auf
GITHUB läuft. In einigen Bereichen des Netzes habe ich aber von
Problemen bei der 2.* Version gelesen und das Libs "angepasst" werden
müssen. Das Teil ist einfach zu neu. Da sind gefühlsmäßig sicher
Kinderkrankheiten drin ;)
Nun musst du SO machen.
1. ARDUINO-IDE starten.
2. Installiere deinen Chip (via Boardverwalter). Die Grundauswahl ist
bescheiden. *** Anleitung sieh unten.
Starte b4r :
Gehe in BOARDauswahl und stelle dein Board ein.
Also deine CPU etc. Dein Installierter Chip sollte nun auftauchen.
Alle Parameter richtig einstellen, Com1 einfach lassen.
Dann auf "Kompilieren und starten" klicken (F5)
Normalerweise würde der jetzt bei einen angeschlossenen Board das Prg
kompilieren und starten. Da du kein Board angeschlossen hast, ist das
etwas komplizierter.
Warte bis recht der Text erscheint. "Dein Script brauch xxx Bytes.
HOCHLADEN.
Klicke auf Abbrechen.
1. ARDUINO-IDE starten.
2. Gehe auf Projekt öffnen.
3. Lade im "Zwangs"-Unterverzeichnis Objekt/src deines Programmes die
Datei SRC.INO. Die Arduino-Ide erkennt die am Logochen beim öffnen.
Wundere dich nicht über die vielen Reiter. Muss dich nicht
interessieren. Kannst aber was lernen wenn du sie dir anschaust ;)
Nun musst du in der Arduino-IDE (wenn du es nicht schon gemacht hast)
deinen Progammer einstellen. Danach im Menü SKETCH auf "Hochladen mit
Programmer" anklicken. Und die Arduino-IDE macht den Rest.
Wie oft erwähnt. B4x (hier b4r) ist KEIN Compiler. Sondern ein
Code-Wandler. Er mach aus einfachen Basic-Code einen Code den ein
anderes Compiler versteht.
*************************************************************
Anleitung für deinen Chip.
1. Arduino-IDE Starten
2. Datei -> Voreinstellungen aufrufen.
3. Bei Extra-Board-Verwalter diesen Link eingeben.
https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json
4. Werkzeuge -> Baords-Boardverwalter aufrufen. (Internet-Verbindung
erf.)
5. Ihn updaten lassen.
6. oben 8535 eingeben.
7. Wenn er MightyCore anzeigt, das Board nach-Installieren.
JETZT b4r neustarten. Und es findet das Board/ den Chip,
Hier noch ein Link wo das auch drin steht.
https://www.instructables.com/Arduino-18x-Clone-With-Atmega-853532644p1284p-the-/
Die reden da auch von der 1.8.* (die 16 ist ohne der berühmten pöser
Java-Datei).
Viel Spass.
Der Code ein 160* Display via i2c anzusteuern sind 6 Zeilen Code max.
Aber !!! du musst den haken bei LiquidCrystal_I2C setzen.
Das sagt den B4R das er die Lib einbinden soll.
SO. Ich hoffe du hast alles verstanden. Aber so Software ist halt nicht
so einfach klicki-Bunti ans laufen zu bringen. ;))
Karl B. schrieb:> "...Das "schlimme" an BASCOM ist ja nicht BASCOM, sondern die Tatsache,> dass viele Einsteiger meinen, sich durch das Verwenden von BASCOM den> Blick in das Datenblatt sparen zu können. So nach dem Motto: BASIC kann> ich ja. Wer sich intensiv mit BASCOM befasst und in der Lage ist, an> kritischen Stellen ASM einzubinden, der kann damit viel erreichen.> Aber meist wird BASCOM nur als ein Baukasten benutzt. Die> vorgefertigten Standardroutinen (Bibliotheken) ermöglichen ja schnelle> Erfolge. Das Verstecken des ASM-Codes führt dazu, sich nicht weiter um> das compilierte Ergebnis zu kümmern..."
Das Argument ist an sich korrekt gilt aber genauso für andere
Hochsprachen. Wie oft wird hier gejammert, das die A/B-Drehencoder mit
P.D. Code nicht funktionieren?
Schnell ein paar Schnipsel zusammenkopiert und dann .... heul!
Jefe schrieb:> Karl B. schrieb:>> "...Das "schlimme" an BASCOM ist ja nicht BASCOM, sondern die Tatsache,>> dass viele Einsteiger meinen, sich durch das Verwenden von BASCOM den>> Blick in das Datenblatt sparen zu können.
Also DAS ist eigentlich falsch.
So wie ich das sehe, muss ich immerhin wissen, wo die 5 Volt in den Chip
müssen. Allein dafür muss ich ins Datenblatt schauen.
Was ich mir sparen kann sind die Hintergründe. Da gebe ich dir Recht.
Aber genau dafür sind Libs da. Damit man sich auf das wesentliche
konzentrieren kann.
Ich muss nicht von jeden Chip wissen wie er intern funktioniert. Das
weiß ich selbst von meiner PC-CPU nur grob. Es reicht völlig aus, wenn
ich weiß was ich wo anschließen muss, Wie hoch die Belastungen sind, und
welche Reaktion welcher Befehl auslöst.
An BASCOM stören mich ein paar andere Sachen.
1. Es kostet für einen armen Menschen ein Schweine Geld.
2. Es gibt kaum Support. (Bisschen Forum o.k.) Aber was ist wenn ich ein
Chip haben will, den BASCOM nicht mag. Bei der Arduino-IDE steht mir ein
sehr großes Schwarm-Verhalten zur Verfügung. Einfach gesagt,
irgendjemand schreibt die passenden "Chip-Treiber" dafür.
Ich habe oben eine Anleitung für den TO geschrieben. Sein Chip habe ich
noch nie benutzt, ich kenne ihn nicht mal. 30 Sek. Googlen und ich hatte
den Link zum "Chip-Treiber". Den in die IDE rein, und fertig ist die
Maus.
3. Hier liebt jeder Open-Source. Aber wieso mögen die Leute dann Bascom.
Ein System wo man auf den Willen des Entwickler angewiesen ist. Ist
zwar bei B4X irgendwie gleich. Bloß da habe ich immer noch den
Arduino-IDE Code den ich dann halt dort ändern muss.
Schlaumaier schrieb:> Ich habe oben eine Anleitung für den TO geschrieben. Sein Chip habe ich> noch nie benutzt, ich kenne ihn nicht mal.
Weil du damals noch in den Windeln gelegen hast.
Ist einer der ersten AVR.
michael_ schrieb:> Weil du damals noch in den Windeln gelegen hast.> Ist einer der ersten AVR.
Aus Papier. ?!?!
COOL
Man ich habe noch Lochkarten kennengelernt. Als ich das Vaterland
verteidigt habe, in den ich Camping in grüner Hose gemacht habe, kam
gerade der ZX-81 auf den Markt.
Fakt ist aber. Ich habe mich einige Jahre danach auf die reine
Software-Entwicklung spezialisiert. Und mache die Elektronik erst wieder
seit ein paar Jahren. Als Hobby, weil sie mit interessiert und weil ich
Zeit und Langeweile habe.
Und die Arduinos (Uno + Nano) sind die ersten Chips der "Neuzeit" mit
den ich mich beschäftige. Davor waren es Logik-Chips der 74er Serie. So
was wie NAND-Gitter und Co. ;)
Den Lernbaukasten dazu habe ich übrigens noch. ;)
michael_ schrieb:> Der TO hat ja schon die AtMega Weiterentwicklung.> Wer AVR macht, sollte aber schon mal über 8535 gestolpert sein.
Wie gesagt, mein "Neustart" war ein Starterset für Arduino mit einen UNO
drin.
Und außer den Atiny-85 habe ich noch kein Chip "nackt" programmiert. Und
selbst den nur weil er perfekt ist, als Steuerung für die Beleuchtung
meiner Modellautos.
Schlaumaier schrieb:> Und außer den Atiny-85 habe ich noch kein Chip "nackt" programmiert.
Dann schwafel hier nicht herum und benutze als nick "Dummbeutel".
Wenn jemand BASCOM verwendet, dann ist das seine Entscheidung.
Schlaumaier schrieb:> 1. Es kostet für einen armen Menschen ein Schweine Geld.
Noch so ein Blödsinn.
Hallo,
Schlaumaier schrieb:> Ich habe mich einige Jahre danach auf die reine Software-Entwicklung> spezialisiert.
Was hast du denn da so entwickelt?
rhf
Lieder, Märchen und Geschichten schrieb im Beitrag #6996668:
> Schlaumaier schrieb:>> Und mache die Elektronik erst wieder>> seit ein paar Jahren. Als Hobby, weil sie mit interessiert und weil ich>> Zeit und Langeweile habe.>> Genau das ist das Problem. Du Pfosten bist nicht in der Lage, mit Bascom> umzugehen, weißt nicht daß man z.B. von JEDEM AVR, der dort> programmierbar ist, die Anschlußbelegung einblenden kann. Aber Sprüche> bringen und anderen Leuten irgendwelchen Frickelmist in einer> Arduino-Umgebung empfehlen -das geht.
Was soll denn diese dauernde Stänkerei mit ständig wechselnden
Nicknamen. Hast Du nichts besseres zu tun? Geh doch mal raus in die
Sonne, es ist herrliches Wetter. Dann kommst du auf andere Gedanken.
m.n. schrieb:> Schlaumaier schrieb:>> 1. Es kostet für einen armen Menschen ein Schweine Geld.>> Noch so ein Blödsinn.https://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=86&category_id=5&option=com_phpshop&Itemid=1
( MCS Electronics )
Price: EUR 107.69
107 Euro sind für mich viel Geld. Besonders wenn ich es wo anders
kostenlos bekomme und mehr Vorzüge habe.
Aber OK. Vielleicht bist du ja so reich das dich das nicht juckt. Kann
alles sein.
Tim D. schrieb:> von JEDEM AVR, der dort>> programmierbar ist, die Anschlußbelegung einblenden kann.
Fein, die können ein Bildchen einblenden, Dafür bin ich dann auf IHRE
Libs angewiesen. Ich habe jedenfalls bisher bei GITHUB für JEDES Teil
was ich mit einen Arduino ansprechen wollte die passende Lib gefunden.
Und ich habe den TO nur eine Alternative genannt. Ich stehe NICHT mit
einer Peitsche hinter ihm und zwinge ihn damit zu arbeiten.
Roland F. schrieb:> Was hast du denn da so entwickelt?>> rhf
Planungssoftware für eine spezielle Branchen-Software für Kunden des
Herstellers. Der hat die an seine Kunden weiter gegeben. Die haben damit
Anlagen geplant, Angebote gemacht etc. Und dann einfach den Ausdruck an
den Hersteller/Außendienstmitarbeiter geschickt als Auftrag.
Schlaumaier schrieb:> Normalerweise würde der jetzt bei einen angeschlossenen Board das Prg> kompilieren und starten. Da du kein Board angeschlossen hast, ist das> etwas komplizierter.>> Warte bis recht der Text erscheint. "Dein Script brauch xxx Bytes.> HOCHLADEN.>> Klicke auf Abbrechen.> 1. ARDUINO-IDE starten.> 2. Gehe auf Projekt öffnen.> 3. Lade im "Zwangs"-Unterverzeichnis Objekt/src deines Programmes die> Datei SRC.INO. Die Arduino-Ide erkennt die am Logochen beim öffnen.
Erst mal vielen Dank für die tolle und ausführliche Anleitung! Das
Grundprinzip hatte ich verstanden, aber ich war der Meinung dass das
Programmieren auch aus B4R heraus gehen müsste. Also dass die ganzen
Schritte automatisch ablaufen. Heute Abend probiere ich das noch mal
aus.
m.n. schrieb:> Schlaumaier schrieb:>> Und außer den Atiny-85 habe ich noch kein Chip "nackt" programmiert.>> Dann schwafel hier nicht herum und benutze als nick "Dummbeutel".> Wenn jemand BASCOM verwendet, dann ist das seine Entscheidung.
Dein Beitrag ist zwar nicht an mich gerichtet, aber ich habe ein paar
Anmerkungen.
Ich bin sehr froh Tipps zu Alternativen zu bekommen. Außer mir will
jemand etwas aufdrängen, wie öfter mal C. Das mag der Standard sein und
ich zweifle den Sinn und die Leistungsfähigkeit in keinster Weise an.
Aber für mich ist das nichts. Ich habe zweimal ernsthaft versucht es zu
lernen, ich komme mit der Syntax einfach nicht klar. Das liegt natürlich
daran, dass ich kaum Vorkenntnisse habe (bis auf mittelmäßige Kenntnisse
mit PHP) und mir fast alles was ich weiß selbst angeeignet habe. Gestern
habe ich mir dann doch nochmal C angesehen. Mit der Syntax habe ich echt
meine Probleme.
Beispiel aus dem AVR-GCC-Tutorial
1
PORTA|=(1<<MEINBIT);/* setzt Bit 2 an PortA auf 1 */
2
PORTA&=~(1<<MEINBIT);/* loescht Bit 2 an PortA */
Nun weiß ich zwar was der Befehl tut und ich könnte ihn ohne
nachzudenken abschreiben, aber ich will die Schreibweise ja auch
verstehen. Ich habe z. B. nicht herausgefunden warum da zwei <<
geschrieben werden und was die Tilde soll. Warum diese seltsame Syntax
so ist wie sie ist. Wenn das einen Sinn hat möchte ich das verstehen.
Ich konnte es nicht herausfinden, jedenfalls nicht in kurzer Zeit.
Für Bascom habe ich mich entschieden weil ich bei meinem ersten Projekt
schnell ans Ziel kommen wollte. ATmega8535, LCD-Display, Encoder für 3
Einstellungen in Ebenen, mehrere Schalter und Taster, zwei DAC (mit
R2R-Netzwerk) und eine Messung über ADC. Für ein mein allererstes
Projekt ist da schon ein ordentlicher Schwierigkeitsgrad. Vorher hatte
ich mich nur ein wenig mit dem AVR-Buch von Roland Walter eingearbeitet
Nach dem ich nun produktiv mit Bascom gearbeitet habe, finde ich es
zugegeben selbst nicht so toll. Aber es erfüllt den von mir erwarteten
Zweck. Ich habe mein Ziel mit Bascom in nur 4 Tagen erreicht und mein
Programm läuft. Trotz der Schwierigkeiten mit dem Display. Bei meinem
Code würde sicher so mancher zu Recht die Hände über dem Kopf
zusammenschlagen, aber es funktioniert alles nach meinen Wünschen und
der Encoder läuft flüssig. Lediglich beim Encoder bin ich einem Beispiel
aus dem Internet gefolgt, dafür kann ich die Anzeige mit 3-5 Umdrehungen
von 0 auf 100 stellen ohne dass der Encoder Positionen überspringt oder
hakt. Das hätte ich mit C in einem Monat nicht geschafft, das müsste ich
erst mal ein halbes Jahr lernen und dann noch die anderen aufkommenden
Probleme lösen.
Ich hatte mir zuvor noch Great Cow Basic und Luna angesehen, darin sah
ich für mich aber keine Vorteile. B4R sieht jedoch vielversprechend aus
und daher bin ich für den Tipp von Schlaumeier wirklich dankbar.
Mein Fazit: Bascom hat also durchaus seine Berechtigung, wie auch die
anderen Sprachen.
m.n. schrieb:> Schlaumaier schrieb:>> 1. Es kostet für einen armen Menschen ein Schweine Geld.>> Noch so ein Blödsinn.
Also ich gehöre zu den Menschen die mit sehr wenig Geld auskommen
müssen. Ist aus gesundheitlichen Gründen so gekommen, gewünscht oder
ausgesucht habe ich mir das nicht.
Bascom kostet zwischen 89 und 115 Euro. Das ist für die meisten nicht so
viel, für mich ist das aber sehr viel Geld. Es wäre diesen Monat nicht
mehr drin. Ich überlege mir aber die Anschaffung, weil ich meine Ziele
damit schnell erreiche (falls ich mich mit B4R nicht anfreunden kann).
Im Markt zu fragen, ob jemand sein Bascom incl. Lizenz verkauft, traue
ich mich erst gar nicht, da kommen nur wieder hirnlose Kommentare. (Auf
diesen Beitrag sicher auch...)
Die Demoversion reicht nämlich nicht wirklich. Erstens ist sie völlig
veraltet und auch wenn immer wieder behauptet wird, dass man die 4kB
Beschränkung als Anfänger ja nie erreichen würde, bin ich mit meinem
Programm, als es fast fertig war, prompt an die Grenze gestoßen. Das
passiert ja gerade als Anfänger, wenn man noch nicht weiß wie man Code
einfach und platzsparend schreibt. Irgendwie habe ich es zum Glück doch
noch so hinbekommen, dass ich meinen Code mit der Demo kompilieren
konnte.
Stefan ⛄ F. schrieb:> Die Doku ist insgesamt grauenhaft und die Libraries sind offenbar nicht> Open-Source. Wer tut sich das freiwillig an?
Anfänger wie ich. Du hast mich hier mal vor vielen Jahren animiert mich
mit Mikrocontrollern zu beschäftigen. Hab auch Deine Webseite besucht.
Nun ist es zwar Bascom geworden, aber hier bin :)
Tim D. schrieb:> Ich bin sehr froh Tipps zu Alternativen zu bekommen. Außer mir will> jemand etwas aufdrängen, wie öfter mal C.
DAS will ich mit sicherheit nicht. Wie oben geschrieben. Du darfst dich
umsehen, ich stehe nicht mit der Peitsche hinter dir.
Fakt ist aber. Nur weil man viel Werbung macht für ein Produkt muss es
nicht das beste sein. Das Problem ist meist nur. Man wird von der
Werbung überhäuft, und bekommt von den Alternativen nix mit.
ICH HASSE C. Mir gegen die komischen Klammers so auf die Nerven,..
Also habe ich damals auch nach alternativen gesucht. Ich habe sehr
günstig von Franzis-Verlag ein Lernpaket mit einer komischen Platine,
ein paar Kleinteile, seltsamer Treibersoftware und einer Bascom Demo für
20 Euro bekommen.
Die Bascom Syntax hat mir auch nicht wirklich zugesagt.
Irgendwann bin ich dann bei der Suche nach einen Entwicklungssystem zum
Android ;) auf das B4x gestoßen. Ich fand das Konzept einfach klasse und
tue es noch immer. 4 Grundverschiedene Gerätetypen mit einer Syntax zu
coden. Und das sogar mit einer die ich von Visual-Basic her kenne.
Coder was willst du mehr. ;)
Klar muss man die Feinheiten der Geräte lernen, aber das ich für mein
Gehirn nicht mehr Arbeit als wenn ich eine neues Objekt einbinde in VB.
Und genau deshalb EMPFEHLE ich b4x. Es kosten 0,nix. Ist viel
kompatibler als Bascom, hat mit einigen Tricks eine gigantische
Community. Einziger klarer Nachteil, wenn es denn einer ist. 99% der
Leute die das nutzen und alle Libs etc. sind halt in English.
Und @to lese dich mal in das Forum ein. Da ist (englisch Wichtig) ne
Menge Infos drin.
Und schaue dir mal diesen Link an.
https://docs.google.com/spreadsheets/d/1qFvc3Q70RriJS3m_ywBoJvZ47gSTVAuN_X04SI0_XBw/edit#gid=0
Das ist eine Liste aller verfügbaren Libs die schon mal im Voraus dabei
sind, oder im Forum nachgeladen werden können. Ich weiß aber nicht ob
die vollständig ist. Keine Panik die B4R Libs sind relativ weit unten.
Kannst aber auch in Spalte F klicken dnn DATEN->Tabellenblatt sortieren
-> Spalte F a-z Anklicken. Dann sind sie alle oben.
Die findest du alle im Forum oder sie sind schon installiert.
Ach und wenn alle Stricke reißen schreibst du halt eine PM an ERLE das
ist der Entwickler der ganzen Teilen. Und der ist voll aktiv im Forum.
Hallo Tim,
Beispiel aus dem AVR-GCC-Tutorial
1) PORTA |= (1 << MEINBIT); /* setzt Bit 2 an PortA auf 1 */
2) PORTA &= ~(1 << MEINBIT); /* loescht Bit 2 an PortA */
Das ist eine abgekürzte Schreibweise in C. Kann man in C auch so
schreiben:
PORTA = PORTA | 0b00000100; "|" ist gleich mit BASIC "OR"
PORTA = PORTA & 0b11111011; "&" ist gleich mit BASIC "AND"
( In C sind |,& Abkürzungen für OR, AND und werden als Operator
bezeichnet)
Das ~ kehrt alle Bits um. Aus 0b00000100 wird 0b11111011. Wird auch als
one's complement bezeichnet.
In BASIC würdest man das so schreiben:
PORTA = PORTA OR 0b00000100
PORTA = PORTA AND 0b11111011
~0b00000100 ist gleich mit 0b11111011, also eine einfache Umkehrung der
Bits
Da ich in BASIC nicht sehr bewandt bin, weiß ich momentan nicht ob es da
ein BASIC Äquivalent zum "<< oder >>" gibt.
Ist aber nur eine Multiplikation oder Division von 1 durch shiften der
Bits mit 2.
1<<0 = 1 oder 0b00000001
1<<1 = 2 oder 0b00000010
1<<2 = 4 oder 0b00000100
...
1<<7 = 128 oder 0b10000000
128>>7 = 1
128>>6 = 2
...
128>1 = 64
128>0 = 128
Ist auch gleich mit 2 hoch n
2^MEINBIT = 4 oder 0b000000100
2^0 = 1 oder 1<<0
2^1 = 2 oder 1<<1
2^2 = 4 oder 1<<2
...
2^7 = 128 oder 1<<7
Das (1<<MEINBIT) ist gleich mit Multiplikation. Um Bit 2 zu setzen muß
MEINBIT den Wert 2 haben und wird 1<<2 oder 2 hoch 2 ist 4.
Dann wird aus 1<<MEINBIT, (1<<2) oder 0b00000001 (left shift bei 2)
0b00000100
Ich hoffe ich habe es Dir etwas besser verständlich gemacht. C ist nicht
so schlimm wie es am Anfang manchmal vorkommt.
Gerhard
Schlaumaier schrieb:> Price: EUR 107.69
Da nimmt jemand Geld für seine Arbeit - zum Teufel mit ihm.
Fahr mal morgen zum Tanken; heute ist ja noch günstig ;-)
noch etwas: Mir hat bislang die kostenlose Version gereicht.
Hallo Gerhard, vielen dank für dein super verständliche Erläuterung.
Jetzt kann ich etwas damit anfangen.
Ich frage mich warum in Tutorials oder Büchern die für Anfänger sein
sollen, oft gleich im ersten Kapitel solche Beispiele stehen. Da
verliert man doch gleich die Lust an C. Wenn es wenigstens kurz erklärt
wäre.
Vielleicht wäre es für mich sinnvoll erst mal die Syntax auswendig zu
lernen, damit sie ohne Nachschlagen sitzt, wie das 1x1 in der Schule.
Doch wer möchte das schon so trocken angehen?
m.n. schrieb:> Schlaumaier schrieb:>> Price: EUR 107.69>> Da nimmt jemand Geld für seine Arbeit - zum Teufel mit ihm.> Fahr mal morgen zum Tanken; heute ist ja noch günstig ;-)>> noch etwas: Mir hat bislang die kostenlose Version gereicht.
Ich denke darum geht es ihm nicht. Die Software ist (auch wenn sie
unvollkommen ist), für die Arbeit die dahinter steckt, ziemlich günstig.
Das schließt ja nicht aus, dass es für ihn oder für mich sehr viel Geld
ist. Und wenn das Ganze nicht so richtig funktioniert bzw. ich nicht
weiß ob die Vollversion deutlich besser ist als die Demo, dann tue ich
mir echt schwer das Geld dafür auszugeben.
Tim D. schrieb:> ich nicht> weiß ob die Vollversion deutlich besser ist als die Demo, dann tue ich> mir echt schwer das Geld dafür auszugeben.
GENAU.
B4A = Android-Version hat bis vor ca. 1 Jahr noch Geld gekostet. Auch
ca. 60 Euro /Jahr müsste nachschauen. Darauf kommt es mir nicht
wirklich an.
Ich hatte die Vollversion 30 Tage zum Testen. Habe 2 kleine Programme
geschrieben die auf meinen Handy liefen und war zufrieden.
ABER.
Ich hasse Demo-Versionen. Das ist das "kaufen der Katze im Sack wo nur
der Schwanz raus schaut".
Die liebsten Versionen sind die die ich Downloade und dann VOLL nutzen
kann für ein Zeitraum von i.d.R. 14-30 Tage. OHNE Einschränkung und die
TOP-Aktuellste Version. Dann entscheide ich, ob es mir die Kohle wert
ist oder nicht.
Diese Technik macht sogar MS. Mit Office-365.
Ich habe einige Abos (inkl. Handy-Vertrag) (Streaming-Dienste / Readly
etc. )die ich ALLE monatlich kündigen kann. Und ALLE haben mir eine
Probezeit für Lau o. 1 Cent (kein Witz) angeboten. Mir hat das Angebot
zugesagt, und ich habe es gemacht.
Aber eine Demo die 7 Jahre alt ist, und dann mir erzählen das die
Vollversion irgendwas besser kann. O.K. den ihre Verkaufsmethode. Aber
mich locken sie damit NICHT.
Davon abgesehen ist das Basic in Bascom nicht so wirklich Basic.
Wenn B4R 20 Euro im Jahr kosten würde. O.K. Dann bekommt er die halt.
Ist es mir halt wert.
Das Kostenlos ist aber halt ein Argument und in mein Augen ein gutes,
sich die Version mal anzuschauen.
Schlaumaier schrieb:> Davon abgesehen ist das Basic in Bascom nicht so wirklich Basic.
Sehe ich auch so.
Sieht nicht wirklich wie altes Basic mit Zeilennummern und GOTO aus.
Man sollte nicht herabschätzend darauf schauen.
Heute gibt es jegliche brauchbare Soft an jeder Ecke umsonst.
Ich habe das 2001 gekauft.
Wie war die Lage damals?
Assembler war angesagt.
Ein AVR-Basic gab es. Die Demoversion war unbrauchbar.
Die Leichtversion ging nur für den 90S1200 mit 1K Code und 40$.
Die Vollversion kostete 250$.
Von IAR gab es einen C-Compiler EWA-90LE für 3000,- DM.
Der GCC war im Aufbau und fürchterlich in der Handhabung.
Unter WIN auch noch schlecht implementiert.
Das AVR-Studio 3.21 mit dem kostenlosen IAR-C startete gerade.
Das BASCOM, wo alles unter einer Oberfläche war, kam mir für schnelle
Erfolge gerade recht.
Ich glaube, ich hatte damals 130,- DM (?) bezahlt.
Dazu die Bücher von Rowalt und Kühnel.
Hallo,
Tim D. schrieb:> Ich frage mich warum in Tutorials oder Büchern die für Anfänger sein> sollen, oft gleich im ersten Kapitel solche Beispiele stehen.
Das Problem ist, das in diese Tutorials/Büchern der Fokus auf der
Mikrokontrollerprogrammierung liegt. Die verwendete Programmiersprache
wird meist nur gestreift. Es wird dann eben mehr oder weniger
vorausgesetzt, das der Leser über Grundkenntnisse der verwendeten
Programmiersprache verfügt. Das führt dazu das die meisten Anfänger
Programmiersprachenkenntnisse für nebensächlich halten.
Das Gegenteil ist der Fall. Man kommt als Anfänger nicht umhin sich,
zusätzlich mit seinem Projekt, auch mit dem Erlernen einer
Programmiersprache zu beschäftigen (am besten vorher). Das ist zu Anfang
lästig, aber unumgänglich.
Hättest du dich vorher mit den Grundlagen von "C" beschäftigt, wäre es
für dich kein Problem gewesen die Anweisungen Schritt für Schritt
auseinander zu nehmen und zu verstehen was da passiert. Wenn du aber
quasi nebenher zur Kontollerprogrammierung auch noch eine Sprache lernen
willst, wird das schwierig und unter Umständen entmutigend.
> Vielleicht wäre es für mich sinnvoll erst mal die Syntax auswendig zu> lernen, damit sie ohne Nachschlagen sitzt, wie das 1x1 in der Schule.
Das Erlernen des Syntax ist nicht sinnvoll. Du musst verstehen was die
einzelnen Anweisungen bewirken. Das ist mühsam und kostet zu Anfang viel
Zeit, andererseits vermittelt es dir die nötigen Fertigkeiten, damit du
dich letztlich auf dein "Projekt" konzentrieren kannst und nicht ständig
von den mangelnden Sprachkenntnissen immer wieder ausgebremst wirst.
> Doch wer möchte das schon so trocken angehen?
Niemand, aber leider ist das der bessere Weg.
rhf
Roland F. schrieb:> Das Erlernen des Syntax ist nicht sinnvoll. Du musst verstehen was die> einzelnen Anweisungen bewirken. Das ist mühsam und kostet zu Anfang viel> Zeit, andererseits vermittelt es dir die nötigen Fertigkeiten, damit du> dich letztlich auf dein "Projekt" konzentrieren kannst und nicht ständig> von den mangelnden Sprachkenntnissen immer wieder ausgebremst wirst.
Sehe ich nicht ganz so.
Das eine (Syntax) und das andere (Strukturen + Variablen) bilden eine
Symbiose = es geht das eine nicht ohne das andere.
Mein erstens Programm war. :
10 print "ich bin gut"
20 goto 10
Das habe ich auf meinen nagelneuen ZX-81 geschrieben.
Dann habe ich kleine Programme aus Zeitungen abgetippt. Und überlegt
warum was so ist, wie es ist. Also herausgefunden warum der Autor das
so gemacht hat, und was es bedeutet. Dann den Code manipuliert und das
Ergebnis studiert.
Lernbücher heutzutage taugen nicht wirklich was. Zu viel Psychologie und
zu wenig Fachwissen. Es gibt Ausnahmen. Ich habe mir sogar ein sehr
gutes gekauft.
https://www.amazon.de/Arduino-Kompendium-Elektronik-Programmierung-Projekte/dp/3966450399
Für den TO sehr zu empfehlen. Der Autor erklärt sehr gut das C in der
Arduino-IDE und auch wie man die "üblichen Module" aus den Lernbaukästen
ans laufen bringt (Anschließt und auswertet).
Habe ich mir selbst gekauft weil ich es leid war, für jedes Modul im
Netz die Infos zusammen zu suchen. Tipp am Rande: Wenn man die
gedruckte Version kauft, bekommt man die Epub und PDF-Version gratis
dabei. Code im Buch. Geht das suchen noch schneller ;)
Ist aber auch 1 Kilo geballtes Wissen. Aber der Autor schreibt
verständlich.
Wobei ca. die 40% unter "lesen wenn benötigt" fällt.
Mein Tutorial setzt keine C-Kenntnisse voraus
http://stefanfrings.de/mikrocontroller_buch/index.html
Allerdings sollte man ohne Vorkenntnisse nicht die Erwartung hegen,
schon am ersten Tag eine Smart-Home Anwendung hin zu bekommen. Ein
LED-Blinker ist eher realistisch.
Auf einem PC (also erstmal ohne Mikrocontroller) kann man die Sprache
mit Sicherheit deutlich einfacher lernen. Nur ist es dann vielleicht
weniger spannend. Das ist Geschmackssache.
Stefan ⛄ F. schrieb:> Allerdings sollte man ohne Vorkenntnisse nicht die Erwartung hegen,> schon am ersten Tag eine Smart-Home Anwendung hin zu bekommen.
hihi
Da bin ich immer noch am überlegen ob ich mir so was überhaupt antue.
Und vor allen Dingen WIE.
Aber wenn überhaupt dann OHNE Internet. !!!!! Da führt kein Weg dran
vorbei. Ansonsten bin ich zu paranoid. Sorry ;)
Tim D. schrieb:> aber ich war der Meinung dass das> Programmieren auch aus B4R heraus gehen müsste.
Wieso muß man sich das antun? Einen Interpreter über dem Compiler oder
wie immer man das nennen soll, wo dann letztendlich doch die Arduino-IDE
benutzt wird, klingt nach maximaler Blindleistung.
Schreibe mal ein paar einfache Dinge direkt in der Arduino-Umgebung, so
furchbar schlimm ist C++ nicht. Du wirst zu Anfang etwas mit den
geschweiften Klammern und dem Semikolon hadern, aber da kommt man rein
und es gibt massenhaft fertige Libraries - natürlich von
unterschiedlicher Qualität.
Basic ist ganz nett, aber je früher Du Dich davon verabschiedest, desto
besser.
Roland F. schrieb:> Das Erlernen des Syntax ist nicht sinnvoll. Du musst verstehen was die> einzelnen Anweisungen bewirken. Das ist mühsam und kostet zu Anfang viel> Zeit, andererseits vermittelt es dir die nötigen Fertigkeiten, damit du> dich letztlich auf dein "Projekt" konzentrieren kannst und nicht ständig> von den mangelnden Sprachkenntnissen immer wieder ausgebremst wirst.
Du hast natürlich Recht. Ich hab es ja auch 2x versucht, einmal mit
einem Buch (weiß nicht mehr welches, es ist 6 oder 7 Jahre her). Es gab
dabei zwei Probleme. Man lernte stumpf Anweisung für Anweisung, das
Zusammenspiel weniger. Am Anfang war ich unterfordert. "Hallo Welt" ist
schnell eingetippt. if/else/do/loop/for/next etc.. selbsterklärend. Auch
Arrays lassen sich leicht verstehen. Aber dann nehmen die meisten Bücher
Fahrt auf, dass man nicht mehr mitkommt.
Oder die Beispielcodes zu den Anweisungen sind unheimlich kompliziert
und enthalten zusätzlich auch Anweisungen die man noch nicht hatte.
Besser fände ich, wenn es immer ganz einfache Beispiele sind, die nur
die Anweisung selbst behandeln. Zusätzlich weitere kompliziertere
Beispiele sind natürlich sinnvoll. Doch erst mal muss man die Anweisung
verstanden haben und das ist schwierig, wenn z.B. (übertrieben gesagt)
aus einer einfachen Tonausgabe gleich ein Sinusgenerator mit
Bereichsumschaltung daraus gemacht wird.
Besser wäre ich wohl mit einem Kurs klargekommen. In meiner Nähe wurde
einmal Java und PHP angeboten, immerhin. Und öfter mal Python. Zu C fand
ich leider nichts.
Stefan ⛄ F. schrieb:> Mein Tutorial setzt keine C-Kenntnisse voraus> http://stefanfrings.de/mikrocontroller_buch/index.html
Ich habe mir Teil 1 deines Tutorials gerade angesehen, das ist toll.
Echt jetzt. Da bekomme ich nach meinem bisherigen Frust wieder Lust
darauf. Und auf Seite 112 hast du sogar die Schreibweisen erklärt, die
mir in anderen Anleitungen bisher als gottgegeben erschienen.
Hallo,
Tim D. schrieb:> ...einmal mit einem Buch...
Mein Rat ist immer das Original: "Programmieren in C" von
Kernighan/Ritchie in der zweiten (ANSI-C-)Ausgabe. Im Buch wird die
Sprache an Hand von kleinen Programmbeispielen erklärt, die nach und
nach die Anweisungen von "C" erklären. An Hand vieler, durchaus
nützlicher Quellcodebeispiele wird gezeigt wie man effektiv in "C"
programmiert.
> Man lernte stumpf Anweisung für Anweisung, das Zusammenspiel> weniger.
Das ist ganz typisch für deutsche Autoren, da habe ich immer das Gefühl
dass da einer vom anderen abschreibt.
Stefan ⛄ F. schrieb:> Mein Tutorial setzt keine C-Kenntnisse voraus> http://stefanfrings.de/mikrocontroller_buch/index.html
Für den Einstieg sicherlich brauchbar, ersetzt aber kein Lehrbuch um "C"
zu lernen.
rhf
Hi
>Ist das wirklich so schwer?>https://halvar.at/elektronik/kleiner_bascom_avr_kurs/lcd_textanzeige/
Das sollte man den Autor dieses Beitrags fragen: D0...D3 haben nichts
an Masse zu suchen. Das ist kontraproduktiv, da die Datenanschlüsse
integrierte Pull-Up-Widerstände besitzen. Also einfach offen lassen.
MfG Spess
spess53 schrieb:> Das sollte man den Autor dieses Beitrags fragen: D0...D3 haben nichts> an Masse zu suchen. Das ist kontraproduktiv,
Da er die Anzeige mit Hintergrundbeleuchtung betreibt, muß er sich wegen
der typ. 0,13 mA Stromaufnahme pro Pin nicht ins Hemd machen.
Ich hätte eher C4 bemängelt und den zu kleinen Wert von C1 ;-)
Hat eigentlich schon mal jemand vorgeschlagen, dass die Fuses
kontrolliert werden sollten?
Wenn das Teil mit 8 MHz rennen sollte, aber nur mit 1 MHz rennt, weil
der Takt durch 8 geteilt wird, stimmt das Timing hinten und vorne nicht.
Die Library fängt das eventuell ab, die Bascom-Routine vermutlich nicht.
Hatte mit Bascom und Displays eigentlich nie Probleme...
grantler schrieb:> Hat eigentlich schon mal jemand vorgeschlagen, dass die Fuses> kontrolliert werden sollten?>> Wenn das Teil mit 8 MHz rennen sollte, aber nur mit 1 MHz rennt, weil> der Takt durch 8 geteilt wird, stimmt das Timing hinten und vorne nicht.>> Die Library fängt das eventuell ab, die Bascom-Routine vermutlich nicht.>> Hatte mit Bascom und Displays eigentlich nie Probleme...
Gute Idee. Auf Deinen Beitrag hin habe ich die Fusebits gleich
kontrolliert. Stimmt aber alles. Beim ATmega8, mit dem ich das Display
ebenfalls ausprobiert habe, stimmen die Fusebits auch. Und auch damit
funktioniert das Display nicht. Jedenfalls wie mit dem 8535 nicht ohne
zusätzliche Lib.
Durch Stefans tolles Tutorial möchte ich doch noch mal versuchen mich in
C einzuarbeiten und mein Programm neu schreiben. Da ich noch einige
Funktionen hinzugefügt habe, habe ich nun leider das 4kB-Limit der
Bascom-Demoversion überschritten. Sollte ich aber doch bei Bascom
bleiben, würde ich mir die Vollversion kaufen. Ich vermute dass das
Display dann funktionieren würde. Werde dann natürlich berichten.
Tim D. schrieb:> Ich habe z. B. nicht herausgefunden warum da zwei <<> geschrieben werden und was die Tilde soll.
Ach komm, das Internet ist voll von Operatorbschreibungen, man muß sie
nur lesen.
https://de.wikibooks.org/wiki/C-Programmierung:_Ausdr%C3%BCcke_und_OperatorenTim D. schrieb:> Vielleicht wäre es für mich sinnvoll erst mal die Syntax auswendig zu> lernen
Nö, das bringt nichts, einfach nur durch benutzen lernen.
So schlimm ist die Syntax nicht. Es gibt nur wenige Syntaxelemente, die
wichtigsten sind {} und ;
Dann gibt es noch Schlüsselwörter, wie if, for, while, switch, break,
continue, return und Variablentypen (int, char, float).
Die Pointersyntax ist für Anfänger am schwersten, kann man aber erstmal
weglassen. Arrays kann man auch über den Index [] zugreifen.
C hat den großen Vorteil, daß die Parser recht ausgereift sind. Sie
können daher beliebig komplexe Ausdrücke fehlerfrei parsen. Ein
Compilerbauer schreibt auch nicht alles neu, sondern nur das Frontend
für den neuen CPU-Typ.
C++ ist dagegen noch recht neu. Das merkt man daran, daß in schneller
Folge immer neue Varianten erscheinen. Zur Zeit ist C++23 in
Entwicklung.
https://en.wikipedia.org/wiki/C%2B%2B23
Tim D. schrieb:> Durch Stefans tolles Tutorial möchte ich doch noch mal versuchen mich in> C einzuarbeiten und mein Programm neu schreiben.
Mach, das lohnt sich und das wirklich "eingemachte" braucht man in eher
kleinen Projekte wie für µCs eh nicht wirklich.
Wenn dir echte Bücher auf Deutsch lieber sind, dann empfehle ich dir
"Grundkurs C".
zB. von hier:
https://www.amazon.de/Grundkurs-C-C-Programmierung-verst%C3%A4ndlich-erkl%C3%A4rt/dp/3836241145
grantler schrieb:> Wenn das Teil mit 8 MHz rennen sollte, aber nur mit 1 MHz rennt, weil> der Takt durch 8 geteilt wird, stimmt das Timing hinten und vorne nicht.
Langsamer geht immer, das ist dem Display egal.
Peter D. schrieb:> C++ ist dagegen noch recht neu. Das merkt man daran, daß in schneller> Folge immer neue Varianten erscheinen. Zur Zeit ist C++23 in> Entwicklung.
Manchmal frage ich mich, ob das primär gemacht wird, um mehr Bücher zu
verkaufen. Mein Interesse an C++ sinkt jedenfalls stetig.
Eine Portierung von Go auf Mikrocontroller wäre cool. Die Sprache ist
einfacher als C, hat trotzdem einen Garbage Collector, so etwas
ähnliches wie Klassen, und ist auch für komplexe Projekte gut genug. Da
kommt man viel schneller rein.
Um noch mal zu beschreiben wo ich beim autodidaktischen Lernen
Schwierigkeiten habe:
Beispiel Seite 71 - Einstieg in die Elektronik mit Mikrocontrollern Band
1
1
uint8_tgross=(zentimeter>90);// geht auch ohne Klammern
2
uint8_triesig=(zentimeter>200);
3
if(gross&&!riesig)
4
{
5
schreibe(“Eristgrossabernichtriesig“);
6
}
7
uint8_tx=12;
8
uint8_ty=3;
9
if(x==3||y==3)
10
{
11
schreibe(“EinederbeidenVariablenhatdenWert3“);
12
}
Das ist zwar kein Beispiel das man abtippen und ausprobieren soll. Zum
besseren Verständnis fände ich aber doch gut, wenn es auch funktionieren
würde. Zumindest für mich ist es hilfreich, wenn Beispiele vollständig
sind und jeder Schritt kurz kommentiert ist.
Bei Beispiel 1 fehlt für "zentimeter" die Zuweisung.
Bei Beispiel 2 soll da "schreibe()" ein Funktionsaufruf sein? Ich dachte
ich hätte einfache Funktionen verstanden, aber das Ding bringe ich nicht
zum Laufen. Gut, das soll ich in diesem Kapitel ja auch noch nicht, aber
wenn Beispiel nicht nur auf das Notwendige beschränkt sind, bin ich eben
in Versuchung auch den Rest zu verstehen bzw. zu ergänzen, weil ich
sonst befürchte, dass mir das später fehlt.
Ansonsten finde ich die Erklärungen im Manuskript bisher gut
verständlich.
Tim D. schrieb:> Zum besseren Verständnis fände ich aber doch gut,> wenn es auch funktionieren würde.
Ja, da hast du Recht. Bei meinen neueren Anleitungen habe ich das auch
beherzigt.
> soll da "schreibe()" ein Funktionsaufruf sein?
Ja. Das Problem ist, dass du an dieser Stelle im Buch noch nicht gelernt
hast, wie man überhaupt Text ausgibt. Wenn ich dir nun dafür 40 Zeilen
weiteren Code zum Abtippen präsentieren würde, wärst du wiederum damit
überfordert. Zudem müsstest du dich vorher mit weiteren Arbeitsmitteln
(USB-UART Adapter und Terminalprogramm) vertraut machen.
Das ist genau der Punkt, warum ich der Meinung bin, dass man die Sprache
leichter auf einem PC lernt. Dort hat man eine Eingabe (Tastatur),
Ausgabe (Bildschirm) und einen vollwertigen Debugger out-of-the-box zur
Verfügung.
Arduino hat diese Ein-/Ausgabe-Schnittstellen Standardmäßig dabei. Aber
da musst du halt damit leben, dass im Hintergrund einiger Code in dein
Programm eingefügt wird, damit das überhaupt möglich ist.
Stefan ⛄ F. schrieb:> Ja, da hast du recht. Bei meinen neueren Anleitungen habe ich das auch> beherzigt.
Das sollte auch mehr eine allgemeine Kritik an Tutorials und Büchern
sein, nicht speziell an deinem. Ich fand es nur ein gutes Beispiel, um
zu erklären wo es bei mir hakt.
Hm.
Ich komme echt aus einer anderen Zeit.
Ich habe damals programmieren gelernt (ohne Hilfe + Anleitungsbücher,
die gab es damals nämlich kaum) in den ich Meterlange Listings in den
Computerzeitungen abgetippt habe.
Dann habe ich sie laufen lassen und manipuliert. Und dabei gelernt wie
die Befehle funktionieren. Tippfehler haben mir auch angezeigt wo ich
Syntax-Fehler gemacht habe.
Aber analytische Vorgehensweise ist heute kaum noch drin. Macht keiner
mehr.
Ein kleines Buch (lag mein Zx-81 bei) hat mir erklärt was Variablen
sind, und deren Typen.
Allerdings stamme ich auch aus einer Zeit wo man zwar viele viele
Programme hatte, aber 0 Anleitung. Da lernt man dann automatisch wie man
ohne Anleitung zurecht kommt.
Einfach gesagt. Ich (ok wie gesagt ich bin anders erzogen) würde mich
NIE auf Anleitung verlassen. Ich stelle / Bekomme eine Aufgabe und muss
eine Lösung finden.
@To Du wirst sehr oft beim entwickeln von Code vor Problemen stehen.
Heutzutage benutzt man google und bekommt einen Codeschnipsel. Da muss
man dann durchblicken und diesen Code für sein Programm anpassen.
ABER. Eins kann ich dir aus Jahrzehnte langer Erfahrung sagen. Es gibt
nix schlimmere als durch den Code eines anderen Programmierer durch zu
blicken selbst wenn der sehr sauber dokumentiert ist. Weil bevor du da
durch blickst muss du erst mal durch seine Gedanken und Eigenheiten
durch blicken.
Ich höre bei meinen Codes auch oft, komisch das das funktioniert da
blickt doch keiner durch. ;) Ist ergo völlig normal.
Während ich meinen Beitrag bearbeitet habe, wurden schon wieder neue
geschrieben.
Stefan ⛄ F. schrieb:> Ja. Das Problem ist, dass du an dieser Stelle im Buch noch nicht gelernt> hast, wie man überhaupt Text ausgibt. Wenn ich dir nun dafür 40 Zeilen> weiteren Code zum Abtippen präsentieren würde, wärst du wiederum damit> überfordert. Zudem müsstest du dich vorher mit weiteren Arbeitsmitteln> (USB-UART Adapter und Terminalprogramm) vertraut machen.>> Das ist genau der Punkt, warum ich der Meinung bin, dass man die Sprache> leichter auf einem PC lernt. Dort hat man eine Eingabe (Tastatur),> Ausgabe (Bildschirm) und einen vollwertigen Debugger out-of-the-box zur> Verfügung.
Ich hatte nur in AVR-Studio ausprobiert, ob sich der Code mit meinen
Ergänzungen fehlerfrei compilieren lässt.
Mit UART kenne ich mich durch Bascom schon ein wenig aus und das
Terminalprogramm hab ich auch noch installiert. Aber der Aufwand wäre an
dieser Stelle natürlich viel zu groß.
Im Grunde sollte doch die Linux-Konsole reichen. Von meinem letzten
Anlauf C zu lernen sollten noch alle notwendigen Pakete installiert
sein.
Teo D. schrieb:> https://www.onlinegdb.com/online_c_compilerJoe G. schrieb:> ] https://sites.google.com/site/virtualcide/
Danke euch beiden für die Tipps! Manchmal sieht man den Wald vor lauter
Bäumen nicht. Die Leseprobe habe ich mir auch gerade heruntergeladen,
aber erst mal möchte ich mit den 3 Tutorials von Stefan arbeiten.