Forum: Mikrocontroller und Digitale Elektronik Atmega32, 7segment-Anzeige, Portproblem


von Holger S. (capa)


Lesenswert?

Die folgenden 4 Ausgänge scheinen nicht zu funktionieren:

PC5 (TDI)
PC4 (TDO)
PC3 (TMS)
PC2 (TCK)


Ich hab ein programm geschrieben was auf einer 7segment anzeige zahlen 
darstellen soll (ohne bcd zu 7segment-decoder), nur leider scheinen 
diese 4 Ausgänge nicht zu funktionieren, die anderen 4 schalten genau so 
wie ich das will.

Der aufbau ist wie folgt:


--------
-------- -> 4x 74HC513an an Port C -> 4x 7segment anzeigen
--------
-Atmega-
--------
--------
-------- -> die 4 Enable-ports von den 74hc513an
--------

Also ein bus aus 4x 74hc513an  an deren ausgänge je 1x 7Segment-Anzeige 
hängt, der bus hängt an Port C.
Die 4 Enable pins des Latches liegen an Port A (0-3).

Diese Funktionieren einwandfrei und die 4 oben nicht aufgezählten 
ausgänge vom Port C sind auch in ordnung.

Richtig angeschlosssen ist meiner meinung nach alles insofern die 
datenblätter stimmen, kann sich also eigentlich nur noch um ein problem 
des avr handeln.

Mein aktueller testcode (noch nichtmal hochgeladen, da gerade erst 
umgeschrieben ^^)
Ich hoffe nur ich hab da nix vergessen :)
1
/*
2
 * AVRAssembler2.asm
3
 *
4
 *  Created: 02.02.2012 22:22:24
5
 *   Author: Capa
6
 */ 
7
8
.include "m32def.inc"
9
10
.def temp     = r16 
11
.def zahl     = r17
12
.def display     = r18
13
.def temp1     = r19
14
.def temp2     = r20
15
.def temp3     = r21
16
17
.equ segment_ddr         = ddrc
18
.equ segment_port        = portc
19
.equ latch_ddr     = ddra
20
.equ latch_port     = porta
21
22
23
.cseg
24
.org 0
25
    rjmp reset
26
27
reset:
28
  // Stackpointer init //
29
    ldi temp, low(ramend)
30
    out spl, temp
31
    ldi temp, high(ramend)
32
    out sph, temp
33
  // Stackpointer init //
34
35
  // Ausgänge einstellen //
36
    ldi temp, 0xFF
37
    out segment_ddr, temp
38
    ldi temp, 0xFF
39
    out latch_ddr, temp
40
  // Ausgänge einstellen //
41
42
endlos:
43
44
  ldi display, 0b11111111
45
  out latch_port, display
46
  ldi zahl, 0b11000000     // Zahl 0
47
    out segment_port, zahl
48
  ldi display, 0b11110000
49
  out latch_port, display
50
  call delay
51
52
  ldi display, 0b11111111
53
  out latch_port, display
54
  ldi zahl, 0b11111001     // Zahl 1
55
    out segment_port, zahl
56
  ldi display, 0b11110000
57
  out latch_port, display
58
  call delay
59
60
  ldi display, 0b11111111
61
  out latch_port, display
62
  ldi zahl, 0b10100100     // Zahl 2
63
    out segment_port, zahl
64
  ldi display, 0b11110000
65
  out latch_port, display
66
  call delay
67
    
68
  ldi display, 0b11111111
69
  out latch_port, display
70
  ldi zahl, 0b10110000     // Zahl 3
71
    out segment_port, zahl
72
  ldi display, 0b11110000
73
  out latch_port, display
74
  call delay
75
76
  ldi display, 0b11111111
77
  out latch_port, display
78
  ldi zahl, 0b10011001     // Zahl 4
79
    out segment_port, zahl
80
  ldi display, 0b11110000
81
  out latch_port, display
82
  call delay
83
84
  ldi display, 0b11111111
85
  out latch_port, display
86
  ldi zahl, 0b10010010     // Zahl 5
87
    out segment_port, zahl
88
  ldi display, 0b11110000
89
  out latch_port, display
90
  call delay
91
92
  ldi display, 0b11111111
93
  out latch_port, display
94
  ldi zahl, 0b10000011     // Zahl 6
95
    out segment_port, zahl
96
  ldi display, 0b11110000
97
  out latch_port, display
98
  call delay
99
100
  ldi display, 0b11111111
101
  out latch_port, display
102
  ldi zahl, 0b11111000     // Zahl 7
103
    out segment_port, zahl
104
  ldi display, 0b11110000
105
  out latch_port, display
106
  call delay
107
108
  ldi display, 0b11111111
109
  out latch_port, display
110
  ldi zahl, 0b10000000     // Zahl 8
111
    out segment_port, zahl
112
  ldi display, 0b11110000
113
  out latch_port, display
114
  call delay
115
116
  ldi display, 0b11111111
117
  out latch_port, display
118
  ldi zahl, 0b10011000     // Zahl 9
119
    out segment_port, zahl
120
  ldi display, 0b11110000
121
  out latch_port, display
122
  call delay
123
124
        rjmp endlos
125
126
delay:
127
    ldi temp1, 0xFF
128
    ldi temp2, 0xFF
129
    ldi temp3, 20
130
delay_2:
131
    dec temp1
132
    brne delay_2
133
    dec temp2
134
    brne delay_2
135
    dec temp3
136
    brne delay_2
137
    ret

Wüsste jemand woran das liegen könnte ?

von Der chaot (Gast)


Lesenswert?

also ich würde messen ob die überhaupt als ausgänge geschaltet sind.

http://www.atmel.com/Images/doc2503.pdf

und dann schau mal auf seite 5 was bei portc steht.
vll könnte es daran liegen

von Michael U. (amiga)


Lesenswert?

Hallo,

PortC, Mega32 -> JTAG ist aktiv, per Fusebit abschalten...

Gruß aus Berlin
Michael

von Holger S. (capa)


Lesenswert?

ok werd das gerade mal testen habs gerade deaktiviert :)
natürlich unter beachtung der sicherheitshinweise die ich mehrfach hier 
gelesen hab ^^ erst aktuellen stand runterladen jtagen deaktiviert und 
wieder hochgeladen.

von Holger S. (capa)


Lesenswert?

:D jetz funktoniert alles super, danke :D

hab vorher mehrfach schaltung/code kontrolliert und gemessen und bin 
fast verzweifelt :/ und das obwohl es sone einfache lösung dafür gibt 
hust

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.