Forum: Mikrocontroller und Digitale Elektronik löst das STK500 meine Probleme ?


von Pfeiffy (Gast)


Lesenswert?

Hallo,
nun bin ich schon wirklich seit einigen Wochen dran mir eine Schaltung 
zu bauen, mit der ich eine temperatur mit dem ic auf dem Computer 
anzeigen kann, aber es klappt einfach nicht..... ich habe auch keine 
Ahnung warum, das Lampen-testprogramm funktoniert, auch die UART geht 
eigentlich (ich hab hier den in und output verbunden und die daten der 
Tastatur kommen so wie beschrieben) - aber es wird es kommt eben über 
den ic nichts am PC an.
Irgendwas ist falsch
- nun die Frage: wenn ich mir das STK500 kaufe, ist darauf dann alles 
schon aufgebaut und ich muss nur noch den IC aufstecken und die RS232 
anschließen und es läuft? (wenn ich das programm auf den IC aufgespielt 
habe), ist der Quarz schon drauf?
Ist das meine Lösung?
Oder hat einer ein Board, auf dem das UART-beispiel vom Tutorial läuft 
und verkauft mir es, mehr will ich ja garnicht.

Gruß und bitte um Hilfe
Pfeiffy

von raketenfred (Gast)


Lesenswert?

Hast du nur den AVR in der schaltung oder auch einen max 232?

sofern der fehlt, kannst du froh sein, wenn der AVR noch lebt.

von Hc Z. (mizch)


Lesenswert?

Du schreibst immer nur von „dem IC“.  Offensichtlich meinst Du damit den 
ATmega und das legt in der Tat nahe, dass es keinen zweiten IC gibt, 
nämlich den MAX232 o.ä.  Poste (oder beschreibe wenigstens) mal Deine 
Schaltung mit Beschreibung des Fehlers.

Sich einen kompletten STK500 zuzulegen, weil man ein einfaches 
anspruchsloses Design nicht zum Laufen bringt, scheint mir ein wenig 
Kanonen auf Spatzen.  Davon einmal abgesehen, ist er für den Einstieg 
natürlich keine schlechte Wahl, aber nicht besonders nötig.

von Pfeiffy (Gast)


Lesenswert?

Hallo,

ja, da habe ich etwas vergessen, ich habe natürlich den Atmega8 und den 
Max232. der Fehler ist, dass im Hyperterminal nicht ankommt.
Ich werde versuchen mein Schaltung zu skizzieren: die UART- 
(Max)-Beschaltung habe ich genau aus dem Tutorial übernommen und die 
Datenleitung mit Pin 2 und 3 des Atmega8 verbunden.
Die Beschaltung des Atmegas ist die in hier verwendete:
http://home.arcor.de/fuenfundachtzig/thermo/schaltplan.png

Ich weiss, im Tutorial hier ist eine andere Schaltung mit 4 MHZ 
angegeben, abr diese hier müsste doch auch gehen - oder?

Gruß
Pfeiffy

von Marius W. (mw1987)


Lesenswert?

Ein paar Anmerkungen zu deinem Schaltplan:
1. Jeder VCC-Pin des ATmegas sollte einen 100 nF KerKo haben (VCC + 
AVCC)
2. Der Spannungsregeler braucht auch je einen 100 nF KerKo am Ein- und 
Ausgang.

Ansonsten sollte das doch eigentlich funktionieren.

MfG
Marius

von Hc Z. (mizch)


Lesenswert?

Somit hätten wir nun (wenigstens in etwa) die Hardware.  Nun zeig mal 
Deine Software (komplett posten, wenn länger, als Anhang).  Und 
beschreibe den Fehler: Kommt gar nichts?  Kommen undefinierbare Zeichen? 
Wenn ich Dich richtig verstanden habe, hast Du am µC-Sockel Rx und Tx 
probeweise gebrückt und die Zeichen wurden geechot.  Stimmt das?  Bei 
der gewählten Beschaltung mit externem Quarz:  Hast Du die Fuses 
geändert?

von Kasperle (Gast)


Lesenswert?

Im STK500 sind auch noch die Pins 6 mit 4 und 7 mit 8 an der 9pol. D-Sub 
Buchse verbunden. Vielleicht werden diese Verbindungen von der 
AVR-Studio Software abgefragt.

von Pfeiffy (Gast)


Lesenswert?

Hallo,
der code ist dieser (aus dem AVR-Tutorial):
1
.include "m8def.inc"
2
 
3
.def temp    = r16                              ; Register für kleinere Arbeiten
4
.def zeichen = r17                              ; in diesem Register wird das Zeichen an die
5
                                                ; Ausgabefunktion übergeben
6
 
7
.equ F_CPU = 4000000                            ; Systemtakt in Hz
8
.equ BAUD  = 9600                               ; Baudrate
9
 
10
; Berechnungen
11
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
12
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))      ; Reale Baudrate
13
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille
14
 
15
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
16
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
17
.endif
18
 
19
    ; Stackpointer initialisieren
20
 
21
    ldi     temp, HIGH(RAMEND)
22
    out     SPH, temp
23
    ldi     temp, LOW(RAMEND)
24
    out     SPL, temp
25
 
26
    ; Baudrate einstellen
27
 
28
    ldi     temp, HIGH(UBRR_VAL)
29
    out     UBRRH, temp
30
    ldi     temp, LOW(UBRR_VAL)
31
    out     UBRRL, temp
32
 
33
    ; Frame-Format: 8 Bit
34
 
35
    ldi     temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
36
    out     UCSRC, temp
37
 
38
    sbi     UCSRB,TXEN                  ; TX aktivieren
39
 
40
loop:
41
    ldi     zeichen, 'T'
42
    rcall   serout                      ; Unterprogramm aufrufen
43
    ldi     zeichen, 'e'
44
    rcall   serout                      ; Unterprogramm aufrufen
45
    ldi     zeichen, 's'
46
    rcall   serout                      ; ...
47
    ldi     zeichen, 't'
48
    rcall   serout
49
    ldi     zeichen, '!'
50
    rcall   serout
51
    ldi     zeichen, 10
52
    rcall   serout
53
    ldi     zeichen, 13
54
    rcall   serout
55
    rcall   sync                        
56
    rjmp    loop
57
 
58
serout:
59
    sbis    UCSRA,UDRE                  ; Warten bis UDR für das nächste
60
                                        ; Byte bereit ist
61
    rjmp    serout
62
    out     UDR, zeichen
63
    ret                                 ; zurück zum Hauptprogramm
64
 
65
; kleine Pause zum Synchronisieren des Empfängers, falls zwischenzeitlich
66
; das Kabel getrennt wurde
67
                                    
68
sync:
69
    ldi     r16,0
70
sync_1:
71
    ldi     r17,0
72
sync_loop:
73
    dec     r17
74
    brne    sync_loop
75
    dec     r16
76
    brne    sync_1  
77
    ret

Gruß
Pfeiffy

von Pfeiffy (Gast)


Lesenswert?

Hallo,
zu dem Fehler, es kommt garnichts an im Hyperterminal

Gruß
Pfeiffy

von Hc Z. (mizch)


Lesenswert?

Nun steht in Deinem Programm
1
.equ F_CPU = 4000000                            ; Systemtakt in Hz
aber die Schaltung, die Du angegeben hast, hat einen 16 MHz-Quarz und 
die Frage nach den Fuses hast Du bisher nicht beantwortet.  Also: mit 
welcher Frequenz von welchem Oszillator läuft Dein µC?

von Stefan (Gast)


Lesenswert?

warum nimmst du nicht einfach den internen zähler auf 1mhz das reicht 
für solsche sachen dicke und genau genug für sowas ist er auch, dann 
haste schon einmal die fehlerquelle quarz und fusebits ausgeschlossen. 
Als übertragungsrate nimmst du dann 1200 baud

von Pfeiffy (Gast)


Lesenswert?

Hallo,
ok - Fuses könnte nun wirklich mein Problem sein. Kannst du mir sagen, 
was ich hier einstellen muss, wie gesagt habe ich den Atmega8 mit dem 
externen 16 MHZ und den geposteten Code.

Gruß
Pfeiffy
(ich habe schon probiert die 4 MHZ in 16 umzuwandeln, ging aber auch 
nicht)

Gruß
Pfeiffy

von Peter R. (pnu)


Lesenswert?

Probiers mal mit fcpu = 1MHz als Frequenzangabe im Programm.Wenn bis 
jetzt die fuses noch nicht verändert worden sind, wird der interne 
RC-Takt auf dieser Frequenz benutzt.

Einen anderen Test, auf welcher Frequenz der Kontroller im Moment läuft, 
kann man über ISP machen:

ISP-Frequenz so hoch einstellen, dass das Lesen der Signatur nicht mehr 
klappt. Dann ist die Bedingung ISP-Frequenz < 1/4 f-Takt verletzt. Die 
Grenze ist zwar nicht so schrf, aber trotzdem ist ein Rückschluss auf 
die Taktfrequenz möglich.

von Pfeiffy (Gast)


Lesenswert?

Hallo,
ich hab es nun probiert die Frequenz auf 1 MHZ umzustellen, aber es kam 
auch nichts raus, danach habe ich probiert meinen Atmega8 auf 16MHZ 
umzustellen, seitdem antwortet er garnicht mehr, hat aber die FUSES 
richtig angezeigt!?.

Ich denke ich muss mich hier nun geschlagen geben, ich denke nicht dass 
ich diese Schaltung, auch wenn Sie so simpel ist zum laufen bringe, 
obwohl ich nun schon 8 Wochen dran bin, möglich wäre nun natürlich das 
STK500, aber es ist wohl auch nicht Sinn der Sache für so ein einfaches 
Problem.

Kann mir irgendjemand eine solche simple Schaltung verkaufen?, 
eigentlich möchte ich nur eine Temperatur auf den PC bringen und dies 
dann später mal erweitern, ich denke wenn ich mal eine Schaltung habe, 
die funktioniert komme ich dann auch weiter?

Gruß und Dank Pfeiffy

von Hannes L. (hannes)


Lesenswert?

Um TXD benutzen zu können, muss man natürlich auch den Portpin auf 
Ausgang schalten.

Ansonsten solltest Du Dich nicht geschlagen geben, sondern kleiner 
anfangen. Dein Quelltext sieht nicht so aus, als hättest Du ihn selbst 
geschrieben und würdest jedes Wort genau verstehen. Mit Kopieren hast Du 
zwar einen schnellen Erfolg, aber nichts gelernt. Das kehrt sich aber 
schnell in einen Misserfolg um, wenn Du den kopierten Code nicht 
nachvollziehen kannst und daher auch nicht auf Vollständigkeit prüfen 
kannst. Da passiert es eben mal, dass der TXD-Pin nicht auf Ausgang 
umgeschaltet wurde.

Mein Tip: Fang kleiner an, erarbeite Dir durch kleinere Projekte erstmal 
etwas Grundwissen und Routine. Es reicht auch nicht, die Beispiele des 
Tutorials zu kopieren. Und gewöhne Dich an den Grundsatz, keine 
unverstandenen Programmteile fremder Herkunft zu verwenden. Ich verwende 
zwar auch Programmroutinen, die ich nicht selbst geschrieben habe, aber 
ich habe sie analysiert und kann sie nachvollziehen. Und ja, auch ich 
habe klein angefangen...

...

von Hc Z. (mizch)


Lesenswert?

Hannes Lux schrieb:
> Um TXD benutzen zu können, muss man natürlich auch den Portpin auf
> Ausgang schalten.

Nein.
1
When the Transmitter is enabled, the normal port operation of the
2
TxD pin is overridden by the USART and given the function as the 
3
Transmitter’s serial output.

von Pfeiffy (Gast)


Lesenswert?

Hallo,

ich hab ja klein angefangen, das Beispiel mit den Lampen an hat ja auch 
funktioniert. Mein Problem ist halt, dass ich denke, dass ich in meiner 
Hardware noch ein Problem habe, auf das ich einfach nicht komme.

Gruß
Pfeiffy

von Pfeiffy (Gast)


Lesenswert?

Hallo,
ok, ich habe den takt auf 1MHZ und 1200 Baud getaktet und es läuft aber 
immer noch nichts. Was könnte denn noch eine Fehlerquelle sein, wenn ein 
einfaches Beispiel mit port auf 1 oder null schalten funktioniert?

Kann ich irgendwie messen, ob auf dem TXD was rauskommt, oder gibt es 
einen einfachen Quelltext, mit dem irgendetwas am com ankommt, damit ich 
wenigstens mal weiss, ob die Fehlerquelle hardware ausgeschlossen ist?

Gruß
Pfeiffy

von Wichtel (Gast)


Lesenswert?

Pfeiffy schrieb:
> Kann ich irgendwie messen, ob auf dem TXD was rauskommt

Das Messgerät dazu heisst Oszilloskop

von Karl H. (kbuchegg)


Lesenswert?

Wichtel schrieb:
> Pfeiffy schrieb:
>> Kann ich irgendwie messen, ob auf dem TXD was rauskommt
>
> Das Messgerät dazu heisst Oszilloskop


Wenn du kein Oszilloskop hast, reicht auch eine LED mit 220 Ohm 
Vorwiderstand. Ein Ende an Masse und mit dem anderen Ende gehst du an 
den Tx Pin vom µC. Wenn der sendet, dann blinkt die LED. Eher mehr 
funzelt, aber das hängt von der Baudrate ab.

von Pfeiffy (Gast)


Lesenswert?

Hallo,
ich habe jetzt folgendes gemacht:
Programm mit 1200 Baud und 1 MHZ, mc programmiert.
Als Ergebnis messe ich am TXD eine Spannung von 3,88 bis 4,4 V 
(flackert), am T1OUT vom Max232 messe ich 3,83 bis 3,78 V (flackernd), 
übers Hyperteminal kommt über COM1 jedoch nichts an 
(1200,8,keine,1,kein)?
was kann ich tun?

Gruß
Pfeiffy

von Karl H. (kbuchegg)


Lesenswert?

Pfeiffy schrieb:

> (flackert), am T1OUT vom Max232 messe ich 3,83 bis 3,78 V (flackernd),
> übers Hyperteminal kommt über COM1 jedoch nichts an
> (1200,8,keine,1,kein)?
> was kann ich tun?

Weitersuchen.
Am Ausgang vom Max hast du ein Signal.
Was ist direkt an der Buchse, dan der das Kabel angesteckt wird?
Wenn du das RS232 Kabel ansteckst, ist dann am anderen Ende das Flackern 
immer noch da? Ist es am richtigen Pin?

von Pfeiffy (Gast)


Lesenswert?

Hallo,
das Flackern habe ich auch, wenn ich das kabel am PC abziehe und dort 
dann am Kabel messe am PIN mit der gleichen Nummer (also hier 2). Stecke 
ich das kabel in den PC ein, flackert es wenige, so zwischen 3,88 und 
3,89 V.

Gruß
Pfeiffy

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.