Beispielcode: ATMega16 8 bit LCD-Ansteuerung von ChatGPT

OP #7334590
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
#7334622
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")

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

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

Persönliche Seite #7341055
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.

Gast #7341064
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!

Persönliche Seite #7341085
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.

Gast #7341104
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.

Gast #7342263
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.

#7342270
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren