Forum: Mikrocontroller und Digitale Elektronik 1602 LCD mit ATmega8535 und Bascom läuft nicht


von Tim D. (Gast)


Lesenswert?

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.
1
'LCD-Test unter Bascom
2
3
$Regfile="m8535.dat"
4
$Crystal=8000000
5
$hwstack=128
6
$swstack=128
7
$framesize=128
8
9
Config Lcdpin = Pin , Db4 = PortB.4 , Db5 = PortB.5 , Db6 = PortB.6 , Db7 = PortB.7 ,  E = PortB.2 , RS =PORTB.3
10
11
Config Lcd = 16 * 2
12
13
Cls
14
'Cursor Off
15
Locate 1,1
16
Lcd "LCD-Modul"
17
18
End

von Gerhard O. (gerhard_)


Lesenswert?

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

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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?

von Tim D. (Gast)


Lesenswert?

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.

von BoomBoomMagic (Gast)


Lesenswert?


von Tim D. (Gast)


Lesenswert?

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.

von Rund-Funker (Gast)


Lesenswert?

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?

von Rund-Funker (Gast)


Lesenswert?

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

von BoomBoomMagic (Gast)


Lesenswert?

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 !

von BoomBoomMagic (Gast)


Lesenswert?

Eine Do....Loop is nicht zwingend erforderlich am Display !
Da dieses ein Data hold haben, behällt es die letzte Anzeige bis neue 
Daten eintreffen !!

von BoomBoomMagic (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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.

von Rund-Funker (Gast)


Lesenswert?

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

von Rund-Funker (Gast)


Lesenswert?

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üß!

von Tim D. (Gast)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

Zeig mal Bilder vom Aufbau!

von Tim D. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Karl B. (gustav)


Lesenswert?

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

von BoomBoomMagic (Gast)


Angehängte Dateien:

Lesenswert?

wenn ich gleich das erste Bild ansehe, dann sehe ich das du dich absolut 
nicht an die Vorgabe gehalten hast - warum dann wundern ??!

von Tim D. (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch die Daten der Displays

von Teo D. (teoderix)


Lesenswert?

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

von BoomBoomMagic (Gast)


Lesenswert?

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.

von Karl B. (gustav)


Lesenswert?

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

von Tim D. (Gast)


Lesenswert?

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.

von Karl B. (gustav)


Lesenswert?

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

von Wilhelm S. (wilhelmdk4tj)


Lesenswert?

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

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

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?

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

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.

von Steffen S. (dl7ate)


Lesenswert?

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

von Steffen S. (dl7ate)


Lesenswert?

Steffen S. schrieb:
> Meiner Meinung nach fehlt ein :
>
> Config PortB = Output
>

vor Deinem : Config Lcdpin = .......

Steffen

von Teo D. (teoderix)


Lesenswert?

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!

von ohne Worte (Gast)


Lesenswert?

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).

von Schlaumaier (Gast)


Lesenswert?

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. ;)

von Schlaumaier (Gast)


Lesenswert?

Nachtrag : Displays steuert mal über Bus-Systeme an. Pins sind Wertvoll.

In der Fall i2c ;)

von Wolfgang (Gast)


Lesenswert?

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.

von Stefan F. (Gast)



Lesenswert?

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 * 2

https://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?

von Tim D. (Gast)


Lesenswert?

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.

von Hermann W. (hermannw)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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
Config Lcd = 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
Locate 1,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 * 2 oder 16x2
 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

von Manfred (Gast)


Lesenswert?

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.

von kai (Gast)


Lesenswert?

------------------------------------------------------------------------ 
--
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)

von m.n. (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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?

von Hugo H. (hugo_hu)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

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.

von Hugo H. (hugo_hu)


Lesenswert?

Stefan ⛄ F. schrieb:
> Außerdem sind die Displays nicht
> alle gleich

Auch Lochraster-Platinen und andere Platinen sind nicht unbedingt gleich 
...

von Tim D. (Gast)


Lesenswert?

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.

von Hugo H. (hugo_hu)


Lesenswert?

Tim D. schrieb:
> Jetzt geht es
> mit beiden Platinen auch mit Bascom

Kinderfrage: Und warum?

von Tim D. (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von Ralf-Peter G. (ralfpeter)


Lesenswert?

Hallo Tim,

welche BASCOM-Version benutzt Du eigentlich?

von Stefan F. (Gast)


Lesenswert?

Wolfgang schrieb:
> Abgesehen davon, ob es sich um den PCF8574 oder den PCF8574A ... handelt

Ich denke nicht, dass hier Port-Expander eine Rolle spielen.

von Irschenberg A8 (Gast)


Lesenswert?

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              ' PCF8574 LED 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             ' PCF8574 LED 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.

von Irschenberg A8 (Gast)


Lesenswert?

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.

von Irschenberg A8 (Gast)


Lesenswert?

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.

von Hugo H. (hugo_hu)


Lesenswert?

Tim D. schrieb:
> Weil ich es jetzt mit einer Bibliothek gemacht habe.

Kannst Du auch veröffentlichen, welche?

von Hugo H. (hugo_hu)


Lesenswert?

Hugo H. schrieb:
> Kannst Du auch veröffentlichen, welche?

Vielleicht war es ja schlicht ein Fehler im Layout ... :-)

von Tim D. (Gast)


Lesenswert?

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"

von Schlaumaier (Gast)


Lesenswert?

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.

Beitrag #6989785 wurde von einem Moderator gelöscht.
von Pandur S. (jetztnicht)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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. ;)

von Hugo H. (hugo_hu)


Lesenswert?

Nicht Tausend, sondern Millionensassa schrieb im Beitrag #6989785:
> Du machst den Eindruck eines selbstgerechten Besserwissers,

Das übliche - Fehler gemacht - nicht zugeben - und irgendetwas 
vorschieben.

von Stefan F. (Gast)


Lesenswert?

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?

von Irschenberg A8 (Gast)


Angehängte Dateien:

Lesenswert?

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!

von Tim D. (Gast)


Lesenswert?

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.

von Hermann W. (hermannw)


Lesenswert?

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.

von H. H. (Gast)


Lesenswert?

Hermann W. schrieb:
> Es fehlt Config PortB=Output

Nein, das erledigt "Config Lcdpin" gleich mit.

von Tim D. (Gast)


Lesenswert?

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.

von Hugo H. (hugo_hu)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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...

von Hermann W. (hermannw)


Lesenswert?

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.

von Spess53 (Gast)


Lesenswert?

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

von H. H. (Gast)


Lesenswert?

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.

von michael_ (Gast)


Lesenswert?

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.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

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 
...".

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

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?-/

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

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

von Teo D. (teoderix)


Lesenswert?

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³!

von Schlaumaier (Gast)


Lesenswert?

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.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

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

von Teo D. (teoderix)


Lesenswert?

@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.

von Karl B. (gustav)


Lesenswert?

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

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

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

von Gerhard O. (gerhard_)


Lesenswert?

EA hat ziemlich klare Instruktionen was die jeweilige 
Arbeitsablaufzeiten betrifft, siehe Seite 6:
https://www.lcd-module.com/fileadmin/eng/pdf/doma/dog-me.pdf

Auch das Original HD44780 ist ziemlich explizit, siehe Seite 24:
https://www.sparkfun.com/datasheets/LCD/HD44780.pdf

Vielleicht hat man vergleichsweise zu Deinen früheren Erfahrungen die 
Dokus mittlerweile verbessert.

von Teo D. (teoderix)


Lesenswert?

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....

von Karl B. (gustav)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Karl B. (gustav)


Lesenswert?

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

: Bearbeitet durch User
von Teo D. (teoderix)


Angehängte Dateien:

Lesenswert?

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
void LCD_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!)
12
    LCD_PORT_LAT = 0x02;
13
    LCD_ENABLE;
14
    LCD_Write(LCD_FUNKTION_SET, INSTRUCTION); 
15
    LCD_Write(LCD_DISPLAY_OFF, INSTRUCTION);
16
    LCD_Write(LCD_DISPLAY_CLEAR, INSTRUCTION);
17
    LCD_Write(LCD_ENTRY_MODE_SET, INSTRUCTION);
18
    LCD_Write(LCD_FUNKTION_SET, INSTRUCTION);

: Bearbeitet durch User
von Karl B. (gustav)


Lesenswert?

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

: Bearbeitet durch User
von Tim D. (Gast)


Lesenswert?

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?

von Editor statt Konditor (Gast)


Lesenswert?

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....

von Tim D. (Gast)


Lesenswert?

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.

von BoomBoomMagic (Gast)


Lesenswert?

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 :-)  :-)  :-)

von Schlaumaier (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Editor statt Konditor (Gast)


Lesenswert?

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!

von Hugo H. (hugo_hu)


Lesenswert?

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 :-)

von Tim D. (Gast)


Lesenswert?

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?

von Schlaumaier (Gast)


Lesenswert?

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. ;))

von Jefe (Gast)


Lesenswert?

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!

von Schlaumaier (Gast)


Lesenswert?

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.

von Roland F. (rhf)


Lesenswert?

Hallo,
Schlaumaier schrieb:
> ...Arduino-IDE Code

Was ist das?

rhf

von michael_ (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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. ;)

von michael_ (Gast)


Lesenswert?

Der TO hat ja schon die AtMega Weiterentwicklung.
Wer AVR macht, sollte aber schon mal über 8535 gestolpert sein.

von Schlaumaier (Gast)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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.

von Roland F. (rhf)


Lesenswert?

Hallo,
Schlaumaier schrieb:
> Ich habe mich einige Jahre danach auf die reine Software-Entwicklung
> spezialisiert.

Was hast du denn da so entwickelt?

rhf

Beitrag #6996668 wurde von einem Moderator gelöscht.
von Tim D. (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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 :)

von Schlaumaier (Gast)


Lesenswert?

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.

von Gerhard O. (gerhard_)


Lesenswert?

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

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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?

von Tim D. (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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.

von michael_ (Gast)


Lesenswert?

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.

von Roland F. (rhf)


Lesenswert?

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

von Schlaumaier (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

Kleiner Nachtrag: Ist in Amazon-Kindle-prime (diese Kindle-Flatrate) 
kostenlos mit drin.

von Stefan F. (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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 ;)

von Manfred (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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.

von Roland F. (rhf)


Lesenswert?

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

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Roland F. schrieb:
> Für den Einstieg sicherlich brauchbar,
> ersetzt aber kein Lehrbuch um "C" zu lernen.

Ja. Es ist nur ein Einstieg.

von Hugo H. (hugo_hu)


Lesenswert?

Wie viel Bascom-Beispiele dazu gibt es wohl?

Z.B.:

https://halvar.at/elektronik/kleiner_bascom_avr_kurs/lcd_textanzeige/

Ist das wirklich so schwer?

von spess53 (Gast)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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 ;-)

von grantler (Gast)


Lesenswert?

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...

von Tim D. (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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_Operatoren


Tim 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

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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_t gross = (zentimeter>90); // geht auch ohne Klammern
2
uint8_t riesig = (zentimeter>200);
3
if (gross && !riesig)
4
{
5
schreibe(Er ist gross aber nicht riesig);
6
}
7
uint8_t x=12;
8
uint8_t y=3;
9
if (x==3 || y==3)
10
{
11
schreibe(Eine der beiden Variablen hat den Wert 3);
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.

von Stefan F. (Gast)


Lesenswert?

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.

von Tim D. (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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.

von Teo D. (teoderix)


Lesenswert?

Das ist ja auch zum Einstieg in µCs Programmiren gedacht, nicht für C.
Hol dir mal ne Leseprobe von dem Buch da ich dir empfohlen habe.
...
https://s3-eu-west-1.amazonaws.com/gxmedia.galileo-press.de/leseproben/5120/leseprobe_rheinwerk_grundkurs_c.pdf

Und was um die zBs aus zu testen:
https://www.onlinegdb.com/online_c_compiler
(Da gibts mehrere von, welcher "Gut" ist ...?)

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Für einfache Testaufgaben in C empfehle ich immer Virtual-C IDE [1]. Ist 
fast wie ein Taschenrechner ;-)

[1] https://sites.google.com/site/virtualcide/

Beitrag #6998766 wurde von einem Moderator gelöscht.
von Reinhard R. (reirawb)


Lesenswert?

Hier hast du ein komplettes C-Buch kostenlos online:

https://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Reinhard

von Tim D. (Gast)


Lesenswert?

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_compiler

Joe 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.

Beitrag #6998781 wurde von einem Moderator gelöscht.
Beitrag #6998787 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.