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
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.
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.
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
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
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?
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.
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
Hallo, zu dem Fehler, es kommt garnichts an im Hyperterminal Gruß Pfeiffy
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?
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
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
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.
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
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... ...
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. |
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
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
Pfeiffy schrieb: > Kann ich irgendwie messen, ob auf dem TXD was rauskommt Das Messgerät dazu heisst Oszilloskop
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.
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.