mikrocontroller.net

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


Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: raketenfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kasperle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
der code ist dieser (aus dem AVR-Tutorial):
.include "m8def.inc"
 
.def temp    = r16                              ; Register für kleinere Arbeiten
.def zeichen = r17                              ; in diesem Register wird das Zeichen an die
                                                ; Ausgabefunktion übergeben
 
.equ F_CPU = 4000000                            ; Systemtakt in Hz
.equ BAUD  = 9600                               ; Baudrate
 
; Berechnungen
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))      ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille
 
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
.endif
 
    ; Stackpointer initialisieren
 
    ldi     temp, HIGH(RAMEND)
    out     SPH, temp
    ldi     temp, LOW(RAMEND)
    out     SPL, temp
 
    ; Baudrate einstellen
 
    ldi     temp, HIGH(UBRR_VAL)
    out     UBRRH, temp
    ldi     temp, LOW(UBRR_VAL)
    out     UBRRL, temp
 
    ; Frame-Format: 8 Bit
 
    ldi     temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
    out     UCSRC, temp
 
    sbi     UCSRB,TXEN                  ; TX aktivieren
 
loop:
    ldi     zeichen, 'T'
    rcall   serout                      ; Unterprogramm aufrufen
    ldi     zeichen, 'e'
    rcall   serout                      ; Unterprogramm aufrufen
    ldi     zeichen, 's'
    rcall   serout                      ; ...
    ldi     zeichen, 't'
    rcall   serout
    ldi     zeichen, '!'
    rcall   serout
    ldi     zeichen, 10
    rcall   serout
    ldi     zeichen, 13
    rcall   serout
    rcall   sync                        
    rjmp    loop
 
serout:
    sbis    UCSRA,UDRE                  ; Warten bis UDR für das nächste
                                        ; Byte bereit ist
    rjmp    serout
    out     UDR, zeichen
    ret                                 ; zurück zum Hauptprogramm
 
; kleine Pause zum Synchronisieren des Empfängers, falls zwischenzeitlich
; das Kabel getrennt wurde
                                    
sync:
    ldi     r16,0
sync_1:
    ldi     r17,0
sync_loop:
    dec     r17
    brne    sync_loop
    dec     r16
    brne    sync_1  
    ret



Gruß
Pfeiffy

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
zu dem Fehler, es kommt garnichts an im Hyperterminal

Gruß
Pfeiffy

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun steht in Deinem Programm
.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?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter R. (pnu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Autor: Hc Zimmerer (mizch)
Datum:

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

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

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wichtel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pfeiffy schrieb:
> Kann ich irgendwie messen, ob auf dem TXD was rauskommt

Das Messgerät dazu heisst Oszilloskop

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Pfeiffy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.