Forum: Projekte & Code Beispielcode: ATMega16 8 bit LCD-Ansteuerung von ChatGPT


von Thomas (kosmos)


Lesenswert?

habe gerade ChatGPT ausprobiert, das ist das Ergebniss auf eine sehr 
simple Vorgabe: Schreibe einen AVR ASM Code für den ATMEGA16 zur Ausgabe 
von Hallo World! auf ein LCD im 8 Bit Modus, nach nichtmal einer Minute 
kommt das dabei raus. Klar ein paar Syntaxfehler aber schon der 
Wahnsinn. Vorallem da man es präzisieren oder Änderung beauftragen kann.
1
; Includes
2
#include "m16def.inc"
3
4
; Constants
5
.equ LCD_RS, PD0
6
.equ LCD_E, PD1
7
.equ LCD_D7, PD7
8
.equ LCD_D6, PD6
9
.equ LCD_D5, PD5
10
.equ LCD_D4, PD4
11
.equ LCD_PORT, PORTD
12
13
; Function prototypes
14
.global lcd_init
15
.global lcd_write_cmd
16
.global lcd_write_data
17
.global lcd_write_string
18
19
; String to be displayed on LCD
20
.db "Hello World!", 0
21
22
; LCD initialization function
23
lcd_init:
24
  ; Wait for 100ms
25
  ldi r16, 100
26
wait_100ms:
27
  dec r16
28
  brne wait_100ms
29
30
  ; Send initialization sequence
31
  ldi r16, 0x38
32
  rjmp lcd_write_cmd
33
  ldi r16, 0x0C
34
  rjmp lcd_write_cmd
35
  ldi r16, 0x06
36
  rjmp lcd_write_cmd
37
  ldi r16, 0x01
38
  rjmp lcd_write_cmd
39
  ret
40
41
; Function to write a command to the LCD
42
lcd_write_cmd:
43
  cbi LCD_PORT, LCD_RS
44
  ldi r17, 0xF0
45
  and r16, r17
46
  out LCD_PORT, r16
47
  sbi LCD_PORT, LCD_E
48
  nop
49
  cbi LCD_PORT, LCD_E
50
  lsl r16
51
  out LCD_PORT, r16
52
  sbi LCD_PORT, LCD_E
53
  nop
54
  cbi LCD_PORT, LCD_E
55
  ret
56
57
; Function to write data to the LCD
58
lcd_write_data:
59
  sbi LCD_PORT, LCD_RS
60
  ldi r17, 0xF0
61
  and r16, r17
62
  out LCD_PORT, r16
63
  sbi LCD_PORT, LCD_E
64
  nop
65
  cbi LCD_PORT, LCD_E
66
  lsl r16
67
  out LCD_PORT, r16
68
  sbi LCD_PORT, LCD_E
69
  nop
70
  cbi LCD_PORT, LCD_E
71
  ret
72
73
; Function to write a string to the LCD
74
lcd_write_string:
75
  ; Load string pointer into r18
76
  ldi r18, lo8(lcd_string)
77
  ldi r19, hi8(lcd_string)
78
79
  ; Loop through string
80
string_loop:
81
  ld r16, X+
82
  cpi r16, 0
83
  breq string_done
84
  rjmp lcd_write_data
85
  rjmp string_loop
86
87
string_done:
88
  ret

von noplag (Gast)


Lesenswert?

Wer das Grundgerüst des Programms wohl ursprünglich verfasst hat?

Vielleicht hat jemand hier Zugriff auf ein geeignetes 
Plagiatsprüfungsprogramm? Das Ergebniss wäre sicherlich interessant.

von Jim (Gast)


Lesenswert?

Was für ein blödsinniges Stück Code.
Wenn einer Ahnung hat, braucht er's nicht.
Wenn er keine Ahnung hat, kriegt er's nicht zum Laufen.

von Hugo H. (hugo_hu)


Lesenswert?

Thomas O. schrieb:
> nach nichtmal einer Minute
> kommt das dabei raus.

Wen willst Du hier veralbern?

Schreibe einen AVR ASM Code für den ATMEGA16 zur Ausgabe
von Hallo World! auf ein LCD im 8 Bit Modus
1
.nolist
2
.include "m16def.inc"
3
4
.list
5
.org 0x0000
6
rjmp reset
7
8
.org 0x0100
9
reset:
10
ldi r16,0xFF ; Configure Port B as output
11
out DDRB,r16
12
13
ldi r16,0x38 ; Initialize LCD in 8-bit mode
14
out PORTB,r16
15
call delay
16
17
ldi r16,0x0C ; Turn on display and cursor
18
out PORTB,r16
19
call delay
20
21
ldi r16,0x06 ; Set cursor move direction and display shift
22
out PORTB,r16
23
call delay
24
25
ldi r16,0x01 ; Clear display
26
out PORTB,r16
27
call delay
28
29
ldi r16,0x80 ; Move cursor to first row, first column
30
out PORTB,r16
31
call delay
32
33
ldi r24, 'H' ; Load character 'H' into r24
34
out PORTB,r24
35
call delay
36
37
ldi r24, 'a' ; Load character 'a' into r24
38
out PORTB,r24
39
call delay
40
41
ldi r24, 'l' ; Load character 'l' into r24
42
out PORTB,r24
43
call delay
44
45
ldi r24, 'l' ; Load character 'l' into r24
46
out PORTB,r24
47
call delay
48
49
ldi r24, 'o' ; Load character 'o' into r24
50
out PORTB,r24
51
call delay
52
53
ldi r24, ' ' ; Load character ' ' into r24
54
out PORTB,r24
55
call delay
56
57
ldi r24, 'W' ; Load character 'W' into r24
58
out PORTB,r24
59
call delay
60
61
ldi r24, 'o' ; Load character 'o' into r24
62
out PORTB,r24
63
call delay
64
65
ldi r24, 'r' ; Load character 'r' into r24
66
out PORTB,r24
67
call delay
68
69
ldi r24, 'l' ; Load character 'l' into r24
70
out PORTB,r24
71
call delay
72
73
ldi r24, 'd' ; Load character 'd' into r24
74
out PORTB,r24
75
call delay
76
77
ldi r24, '!' ; Load character '!' into r24
78
out PORTB,r24
79
call delay
80
81
delay:
82
ldi r18,100
83
delay_loop:
84
dec r18
85
brne delay_loop
86
ret
87
88
.end

"Bitte beachten Sie, dass dieser Code ein einfaches Beispiel ist und 
möglicherweise Anpassungen erfordert, um Ihre spezifischen Anforderungen 
zu erfüllen." (Zitat "ChatGPT")

: Bearbeitet durch User
von Icke ®. (49636b65)


Lesenswert?

Thomas O. schrieb:
> Klar ein paar Syntaxfehler aber schon der Wahnsinn.

Wahnsinn ist, daß der Code für sich allein so nicht funktioniert. Der 
RET-Befehl in Zeile 39 verläßt ein Unterprogramm, das vorher nicht 
aufgerufen wurde. Der Stack wurde auch nicht initialisiert. Außerdem 
fehlen die Angabe der Taktfrequenz und für welchem Assembler der Code 
vorgesehen ist. Weitere Fehler vorbehalten...

: Bearbeitet durch User
von Icke ®. (49636b65)


Lesenswert?

Icke ®. schrieb:
> Weitere Fehler vorbehalten...

- Aufgabenstellung verfehlt, LCD würde im 4-Bit Modus arbeiten statt 
8-Bit
- Port-Pins nicht als Ausgänge initialisiert
- Sequenz "lcd_write_cmd" wird per rjmp angesprungen, aber mit ret 
verlassen
- weder wird das Busy-Flag abgefragt, noch sonst irgendwie auf das LCD 
gewartet

Vermutlich noch mehr Fehler, aber schon an dieser Stelle würde ich den 
Code als völlig unbrauchbar bezeichnen.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Ich habe gerade auch mal gespielt ;-)

"Schreibe ein Programm in Turbopascal zur Berechnung der Fakultät einer 
Zahl."

Läuft sofort :-)

program Fakultaet;
var
  n: integer;
  fakt: longint;

function berechneFakultaet(n: integer): longint;
var
  i: integer;
begin
  fakt := 1;
  for i := 2 to n do
    fakt := fakt * i;
  berechneFakultaet := fakt;
end;

begin
  write('Bitte geben Sie eine Zahl ein: ');
  readln(n);
  if n < 0 then
    writeln('Fehler: n muss >= 0 sein.')
  else
    writeln('Die Fakultät von ', n, ' ist ', berechneFakultaet(n), '.');
end.

von Mindestanforderung (Gast)


Lesenswert?

die magic numbers bei der Display initialisierung sind der Brüller!
bei Analyse der generierung der 100ms Pause beisst man dann in den 
teppich
die fehlenden Comments sind auch ein zeichen von überbordender 
Intelligenz und Schjöpferkraft
...
870 zaeilen Code = 80 Fehler gleich mal dem Arbeitsamet zur Umschulung 
auf reinigungskraft melden!

von Mindestanforderung (Gast)


Lesenswert?

Joe G. schrieb:
> Läuft sofort :-)

Ist nicht überlaufsicher.
Keine Überprüfung der Eingabe auf Numerisch.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Mindestanforderung schrieb:
> Ist nicht überlaufsicher.
> Keine Überprüfung der Eingabe auf Numerisch.

Ja, und die Ausgabe ist nicht auf Spanisch und außerdem ist noch ein 
weiteres Haar in der Suppe ;-)
Die Faszination liegt nicht in einem revisionssicherem Quellcode nach EN 
IEC 62366, sondern in darin, dass auf eine verbale Anfrage ein Code 
erzeugt wird, welcher prinzipiell die Funktion der Anfrage erfüllt.

von Mindestanforderung (Gast)


Lesenswert?

Joe G. schrieb:
> sondern in darin, dass auf eine verbale Anfrage ein Code
> erzeugt wird, welcher prinzipiell die Funktion der Anfrage erfüllt.

Nee, das ist keine "allgemeine verbale Anfrage" sondern die nach einem 
primitiven mathematischen Ausdruck, der bereits in der Grundschule 
gelehrt wurde.

Bereits die Taschenerechner vor 50 Jahren konnten Fakultät berechnen. 
Und nun kann ein Rechnercluster auch das (unvollständige) Pascal-Gesülze 
drumherum ausspucken - Toller Fortschritt :-(

Die Faszination ist eher, wie sich Personen mit überdurchschnittlichen 
IQ von so einer schwachen Leistung blenden lassen. Da ist wohl mehr 
Phantasie und Wunschdenken als knallharte (Ingenieurs-)Analyse dahinter.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Mindestanforderung schrieb:
> Die Faszination ist eher, wie sich Personen mit überdurchschnittlichen
> IQ von so einer schwachen Leistung blenden lassen. Da ist wohl mehr
> Phantasie und Wunschdenken als knallharte (Ingenieurs-)Analyse dahinter.

Da habe ich wohl deine Mindestanforderungen nicht erfüllt, tut mir leid.

von Mindestanforderung (Gast)


Lesenswert?

Joe G. schrieb:

> Da habe ich wohl deine Mindestanforderungen nicht erfüllt, tut mir leid.

Ist mir wurscht.

von Mindestanforderung (Gast)


Lesenswert?

Warum kommt mir bei den beispielen immer die 'HotDog-App' in den Sinn ?!

https://www.youtube.com/watch?v=vIci3C4JkL0

von SvenB. (Gast)


Lesenswert?

Na ja, denken war gestern. Assembler habe ich in meiner Ausbildung und 
am C64 gelernt, jetzt kommt eine KI und schreibt mir ein Programm. Wenn 
ich jetzt bedenke das es nicht mal eine Quellenangabe gibt und ich mich 
daran erinnere wie Bill Gates mit Microsoft so groß geworden ist, könnte 
ich im Strahl kotzen. (Sorry, das ist alles nur geklaut und gestohlen 
und geraubt, wer hat das nur erlaubt...) na ja egal die Intelligenz 
nimmt tatsächlich immer mehr ab.

von Roland P. (pram)


Lesenswert?

"Wow, KI ist einfach unglaublich. Wir haben endlich eine Technologie, 
die in der Lage ist, unser Leben zu vereinfachen und die ganze Arbeit 
für uns zu erledigen. Ich meine, wer braucht noch menschliches Denken, 
wenn wir einfach alles an einen Mikrocontroller delegieren können, der 
von KI gesteuert wird?

Ach, warte... wir können KI immer noch nicht dazu bringen, einfache 
Aufgaben auszuführen, ohne dass sie abstürzt oder Fehler macht. Na ja, 
es ist schön zu wissen, dass wir bald in einer Welt leben werden, in der 
Maschinen unsere Probleme lösen, indem sie noch größere Probleme 
verursachen.

Aber hey, zumindest haben wir jetzt eine Technologie, die in der Lage 
ist, menschliche Fehler zu replizieren, aber auf viel größerem Maßstab. 
Wunderbar.

- chatGpt

: Bearbeitet durch User
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.