Forum: Mikrocontroller und Digitale Elektronik LCD funktioniert nur an Port D (ATmega644P)


von Jan P. (jiss)


Angehängte Dateien:

Lesenswert?

Hallo,

ich steuere ein 4x20 LCD EA-W204B-NLW von Reichelt an.
Die Initialisierung des LCD und die Ausgabe von Zeichen funktionieren 
tadellos, jedoch nur an Port D.
Ich gebe die Steuersignale  RW, RS, E,und die Datensignale DB4, DB5, 
DB6, DB7 (4-Bit Modus) über die binären Ausgänge PB0 und PD2 bis PD7 
aus.
Wenn ich jetzt aber statt PortD den PortA oder PortC einstelle, so 
funktioniert die Initialisierung nicht mehr. Einzig und allein an PortD 
scheint dies möglich zu sein?!?
Ich habe meinen kompletten Code mal angehangen. Wichtig wäre nur die 
lcd.c, habe aber der Vollständigkeit halber mal alle Quelldateien 
angehangen.

Ich verstehe es einfach nicht, da es sich doch nur um binäre Ausgänge 
handelt

von Helfer (Gast)


Lesenswert?

PORTA ist tückisch, wenn man AVcc und AGND nicht oder nicht korrekt 
beschaltet.

PORTC ist tückisch, wenn man die Werkseinstellung für JTAG (enabled) 
nicht ändert.

Beides kann ich in deinem Schaltplan nicht erkennen :)

von Jan P. (jiss)


Lesenswert?

Helfer schrieb:
> PORTC ist tückisch, wenn man die Werkseinstellung für JTAG (enabled)
> nicht ändert.

Würde es reichen die Fuses JTAGEN und SPIEN zu deaktivieren, um alle 
Pins an PortC als normale Pins ansprechbar zu machen?

von holger (Gast)


Lesenswert?

>Würde es reichen die Fuses JTAGEN und SPIEN zu deaktivieren, um alle
>Pins an PortC als normale Pins ansprechbar zu machen?

JTAG reicht. SPIEN kannst du per ISP nicht löschen.

von Jan P. (jiss)


Lesenswert?

OK vielen dank für den Hinweis :) Ich werde es gleich morgen 
ausprobieren und berichten, ob ich erfolgreich war.

von Jan P. (jiss)


Lesenswert?

Hallo,

ich bekomme es leider partout nicht hin die neuen Fuses zu brennen. 
Weder mit dem MYAVR Progtool noch mit AVRDude bekomme ich dies hin. Es 
erscheint jedesmal eine Fehlermeldung.

LFUSE= FD
HFUSE= 99  >> soll geändert werden auf D9, damit JTAGEN deaktiviert 
werden kann

Weiß jemand Rat?

von Michael K. (Gast)


Lesenswert?

Mit Fuses hab ich es noch nicht so :)

Aber damit Dir vielleicht jemand anders helfen kann: Welche 
Fehlermeldung gibt es?

42m

von Jan P. (jiss)


Lesenswert?

1
 trying to connect to device...
2
3
Found programmer: Id = "AVR ISP"; type = S
4
    Software Version = 3.0; Hardware Version = 3.0
5
Programmer supports auto addr increment.
6
Programmer supports buffered memory access with buffersize = 128 bytes.
7
8
Programmer supports the following devices:
9
    Device code: 0x01 = (unknown)
10
    Device code: 0x02 = (unknown)
11
    Device code: 0x03 = (unknown)
12
    Device code: 0x04 = (unknown)
13
    Device code: 0x05 = (unknown)
14
    Device code: 0x06 = (unknown)
15
    Device code: 0x07 = (unknown)
16
    Device code: 0x08 = (unknown)
17
    Device code: 0x09 = (unknown)
18
    Device code: 0x0a = (unknown)
19
    Device code: 0x0b = (unknown)
20
    Device code: 0x0c = (unknown)
21
    Device code: 0x0d = (unknown)
22
    Device code: 0x0e = (unknown)
23
    Device code: 0x0f = (unknown)
24
    Device code: 0x10 = (unknown)
25
    Device code: 0x11 = (unknown)
26
    Device code: 0x12 = (unknown)
27
    Device code: 0x13 = AT90S1200
28
    Device code: 0x14 = (unknown)
29
    Device code: 0x15 = (unknown)
30
    Device code: 0x16 = (unknown)
31
    Device code: 0x17 = (unknown)
32
    Device code: 0x18 = (unknown)
33
    Device code: 0x19 = (unknown)
34
    Device code: 0x1a = (unknown)
35
    Device code: 0x1b = (unknown)
36
    Device code: 0x1c = (unknown)
37
    Device code: 0x1d = (unknown)
38
    Device code: 0x1e = (unknown)
39
    Device code: 0x1f = (unknown)
40
    Device code: 0x20 = ATtiny84
41
    Device code: 0x21 = (unknown)
42
    Device code: 0x22 = (unknown)
43
    Device code: 0x23 = (unknown)
44
    Device code: 0x24 = (unknown)
45
    Device code: 0x25 = (unknown)
46
    Device code: 0x26 = (unknown)
47
    Device code: 0x27 = (unknown)
48
    Device code: 0x28 = AT90S4414
49
    Device code: 0x29 = (unknown)
50
    Device code: 0x2a = (unknown)
51
    Device code: 0x2b = (unknown)
52
    Device code: 0x2c = (unknown)
53
    Device code: 0x2d = (unknown)
54
    Device code: 0x2e = (unknown)
55
    Device code: 0x2f = (unknown)
56
    Device code: 0x30 = AT90S4433
57
    Device code: 0x31 = (unknown)
58
    Device code: 0x32 = (unknown)
59
    Device code: 0x33 = (unknown)
60
    Device code: 0x34 = AT90S2333
61
    Device code: 0x35 = (unknown)
62
    Device code: 0x36 = (unknown)
63
    Device code: 0x37 = (unknown)
64
    Device code: 0x38 = AT90S8515
65
    Device code: 0x39 = (unknown)
66
    Device code: 0x3a = ATMEGA8515
67
    Device code: 0x3b = (unknown)
68
    Device code: 0x3c = (unknown)
69
    Device code: 0x3d = (unknown)
70
    Device code: 0x3e = (unknown)
71
    Device code: 0x3f = (unknown)
72
    Device code: 0x40 = (unknown)
73
    Device code: 0x41 = ATMEGA103
74
    Device code: 0x42 = (unknown)
75
    Device code: 0x43 = ATMEGA128
76
    Device code: 0x44 = (unknown)
77
    Device code: 0x45 = ATMEGA64
78
    Device code: 0x46 = (unknown)
79
    Device code: 0x47 = (unknown)
80
    Device code: 0x48 = (unknown)
81
    Device code: 0x49 = (unknown)
82
    Device code: 0x4a = (unknown)
83
    Device code: 0x4b = (unknown)
84
    Device code: 0x4c = AT90S2343
85
    Device code: 0x4d = (unknown)
86
    Device code: 0x4e = (unknown)
87
    Device code: 0x4f = (unknown)
88
    Device code: 0x50 = (unknown)
89
    Device code: 0x51 = (unknown)
90
    Device code: 0x52 = (unknown)
91
    Device code: 0x53 = (unknown)
92
    Device code: 0x54 = (unknown)
93
    Device code: 0x55 = ATtiny12
94
    Device code: 0x56 = ATtiny15
95
    Device code: 0x57 = (unknown)
96
    Device code: 0x58 = (unknown)
97
    Device code: 0x59 = (unknown)
98
    Device code: 0x5a = (unknown)
99
    Device code: 0x5b = (unknown)
100
    Device code: 0x5c = (unknown)
101
    Device code: 0x5d = (unknown)
102
    Device code: 0x5e = ATtiny2313
103
    Device code: 0x5f = (unknown)
104
    Device code: 0x60 = ATMEGA161
105
    Device code: 0x61 = (unknown)
106
    Device code: 0x62 = (unknown)
107
    Device code: 0x63 = ATMEGA162
108
    Device code: 0x64 = ATMEGA163
109
    Device code: 0x65 = (unknown)
110
    Device code: 0x66 = (unknown)
111
    Device code: 0x67 = (unknown)
112
    Device code: 0x68 = AT90S8535
113
    Device code: 0x69 = ATMEGA8535
114
    Device code: 0x6a = (unknown)
115
    Device code: 0x6b = (unknown)
116
    Device code: 0x6c = AT90S4434
117
    Device code: 0x6d = (unknown)
118
    Device code: 0x6e = (unknown)
119
    Device code: 0x6f = (unknown)
120
    Device code: 0x70 = (unknown)
121
    Device code: 0x71 = (unknown)
122
    Device code: 0x72 = ATMEGA32
123
    Device code: 0x73 = (unknown)
124
    Device code: 0x74 = ATMEGA6450
125
    Device code: 0x75 = ATMEGA6490
126
    Device code: 0x76 = ATMEGA8
127
    Device code: 0x77 = (unknown)
128
    Device code: 0x78 = ATMEGA169
129
    Device code: 0x79 = (unknown)
130
    Device code: 0x7a = (unknown)
131
    Device code: 0x7b = (unknown)
132
    Device code: 0x7c = (unknown)
133
    Device code: 0x7d = (unknown)
134
    Device code: 0x7e = (unknown)
135
    Device code: 0x7f = (unknown)
136
137
avrdude: AVR device initialized and ready to accept instructions
138
139
Reading | ################################################## | 100% 0.02s
140
141
avrdude: Device signature = 0x1e960a
142
avrdude: current erase-rewrite cycle count is 1061109567 (if being tracked)
143
avrdude: reading input file "0xD9"
144
avrdude: writing hfuse (1 bytes):
145
146
Writing |                                                    | 0% 0.00s ***faile
147
d;
148
Writing | ################################################## | 100% 120.03s
149
150
avrdude: 1 bytes of hfuse written
151
avrdude: verifying hfuse memory against 0xD9:
152
avrdude: load data hfuse data from input file 0xD9:
153
avrdude: input file 0xD9 contains 1 bytes
154
avrdude: reading on-chip hfuse data:
155
156
Reading | ################################################## | 100% 15.01s
157
158
avrdude: verifying ...
159
avrdude: verification error, first mismatch at byte 0x0000
160
         0xd9 != 0x2e
161
avrdude: verification error; content mismatch
162
163
avrdude done.  Thank you.

von Helfer (Gast)


Lesenswert?

Mit welcher Kommandpzeile hast du AVRDUDE gefüttert?

von Jan P. (jiss)


Lesenswert?

Wie folgt:
1
@echo off
2
color f0
3
title AvrDude GUI Command Window
4
@echo.
5
@echo. trying to connect to device...
6
avrdude -p ATMEGA644P -c avr910 -P COM1  -u -U hfuse:w:"0xD9":m
7
avrdudeGUI.exe -done
8
pause

Ich verwendet AVRDUDE 5.10 und möchte das JTAGEN deaktivieren, sodass 
ich PORTC als normalen I/O-Port nutzen kann.

von Michael K. (Gast)


Lesenswert?

Was mich ein bisschen wundert ist

> Programmer supports the following devices:
>     Device code: 0x01 = (unknown)

Wieso sollte avrdude diese Liste anzeigen (und dann noch mit so vielen 
Unbekannten), wenn man ihm den richtigen Programmer mit auf den Weg 
gibt?

Welche Version von avrdude verwendest Du? So eine seltsame Auflistung 
habe ich bisher nicht gesehen. [EDIT: Hab gesehen, Du hast meine Frage 
in vorauseilendem Gehorsam bereits beantwortet :)]

42m

von Michael K. (Gast)


Lesenswert?

Jan Peukert schrieb:

> avrdude -p ATMEGA644P -c avr910 -P COM1  -u -U hfuse:w:"0xD9":m

und

> Found programmer: Id = "AVR ISP"; type = S

Ich kenne den avr910 zwar nicht, aber ein AVR ISP ist es wohl  nicht :)

42m

von Jan P. (jiss)


Lesenswert?

Ja auch wenn ich dort avr910 oder avr911 eintrage, es ändert sich nicht.
Verwende den "mySmart USB light" ISP-Programmer. Dieser ist avr910/911 
kompatibel

von Michael K. (Gast)


Lesenswert?

Jetzt muss ich meinen eigenen Blödsinn doch noch kommentieren ...

Da habe ich nicht richtig gelesen, WAS da in der Liste überhaupt 
angezeigt wird sondern einfach unterstellt, avrdude würde die Liste der 
verwendbaren Programmer anzeigen. Ist natürlich Lötzinn.

Ich schäme mich jetzt erst mal ne Runde :)

42m

von Jan P. (jiss)


Lesenswert?

Hier nochmal ne kurze Info zu meinem USB-Programmer:

http://shop.myavr.de/Programmer/mySmartUSB%20light.htm?sp=article.sp.php&artID=200006

- Standard-USB-Controller (SiLabs CP2102) geeignet für WindowsXP- 
WindowsVISTA- Windows7, Linux, MacOSX
- STK500v2 oder AVR910/911 Protokoll
- reiner ISP-Programmer für Atmel AVR-Mikrocontroller im 
USB-Stick-Design
- ausgeliefert wird der Programmer mit der Firmware STK500 V2
- als Alternative kann man sich auch die Firmware AVR911  910  109 
drauf spielen


Ich muss dazu sagen, dass wenn ich STK500V2 auswähle im AVRDUDE ich 
einen timeout bekomme

von Michael K. (Gast)


Lesenswert?

Ich nehme an, Du hast die alternative Firmware dann auch drauf, sonst 
dürfte es mit avr910 gar nicht gehen, oder?

Ich spreche meine USB-Programmer ja per "-P usb" an. Hat es einen Grund, 
daß Du über COM1 gehst?

42m

von Helfer (Gast)


Lesenswert?

Die Kommandozeile ist IMHO richtig.

Das sieht nach einem spezifischen mySmartUSB Light Problem aus und ich 
würde auch mal den myAVR Support bemühen.

von Jan P. (jiss)


Lesenswert?

Hi,

habe jetzt die Firmware STK500 v1 auf meinen ISP-Programmer geflasht und 
nun kann ich auch aus AVRStudio die Fuse-Bits setzen. Das JTAG ist nun 
deaktiviert und im Programmcode setze ich zu Beginn der Mainfunktion das 
JTD-Bit im Register MCUCR auf 1, um JTAG damit zu deaktivieren (laut 
Datenblatt).

main.c
1
// definitions
2
// #################################################################
3
// define cpu clock frequency if not already done
4
/*
5
#if (MCU == atmega8)
6
  #ifndef F_CPU
7
    #warning   "F_CPU was not defined, now defining as 3.686.400Hz"
8
    #define   F_CPU 3686400UL                         // crystal at 3.6864 Mhz
9
  #endif  // F_CPU
10
#else     // (MCU == atmega644p)
11
  #ifndef F_CPU
12
    #warning   "F_CPU was not defined, now defining as 7.372.800Hz"
13
    #define   F_CPU 7372800UL                         // crystal at 7.3728 Mhz
14
  #endif  // F_CPU
15
#endif
16
*/
17
#ifndef F_CPU
18
  #warning   "F_CPU was not defined, now defining as 3.686.400Hz"
19
  #define   F_CPU 3686400UL                         // crystal at 3.6864 Mhz
20
#endif  // F_CPU
21
// #################################################################
22
23
24
// include header files
25
#include "avr/io.h"
26
#include "lcd.h"
27
#include "functions.h"
28
29
// definitions
30
31
// define selection of MPU
32
//#define ATMEGA8
33
#define ATMEGA644P
34
35
36
// ######################### MAIN-FUNCTION #########################
37
int main(void)
38
{  
39
  
40
  // variables & parameters
41
42
  // program-code
43
44
  // deactivate JTAG-pins on PORTC (must be done twice within 4 cycles)
45
  #ifdef ATMEGA644P
46
    MCUCR  |=  (1 << JTD);
47
    MCUCR  |=  (1 << JTD);
48
  #endif
49
  
50
  // initialize lcd
51
  wait_ms(500);
52
  lcd_init();
53
  
54
  // main-loop
55
  while (1)
56
  {
57
58
59
    lcd_clear();
60
    //write_all_addresses();
61
    lcd_place_cursor(1,1);
62
    lcd_write_string("!Das ist Zeile 1");
63
    lcd_place_cursor(2,1);
64
    lcd_write_string("!Das ist Zeile 2");
65
    lcd_place_cursor(3,1);
66
    lcd_write_string("!Das ist Zeile 3");
67
    lcd_place_cursor(4,1);    
68
    lcd_write_string("!Das ist Zeile 4");
69
    wait_ms(20);
70
  }
71
72
  // this part will never be reached during normal program sequence
73
  return 0;
74
}
75
// #################################################################

Allerdings funktioniert die Initialisierung und Ausgabe der Zeichen auf 
PortC immernoch nicht :(

von Jan P. (jiss)


Lesenswert?

Mein Problem ist gelöst. Habe das Display noch einmal neu auf dem 
Steckboard verdrahtet. Da muss sich wohl an einer Stelle ein Fehler 
eingeschlichen haben.

Danke an alle, die mir geholfen haben. Ihr seid die Besten :)

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.