Hallo, ich beschäftige mich erst seit kurzem mit microcontrollern der Atmel AVR RISC Famielie und bei mir ist das folgende Problem aufgetreten: Ich schliese meinen ATmega16 an meinen USB-ISP Programmer an und programmiere ihn. Das System(AVR Studio 4) zeigt mir an Assembly complete, Program Flash: OK. Wenn ich den controller an 5V anschliesse lässt sich kein Spannungsunterschied feststellen(zwische zwei andersgesetzten Bits an Port A). Ich hab das Programm schon öfters geschrieben und nie hat sich was geändert. Kann mir da vielleicht jemand Tipps geben wo ein Fehler aufgetreten sein könnte.(Ein auf anderen ATmega16 funktionierendes Programm wäre Spitze!) Danke julian
Hast Du die richtige *.hex geflasht? Welchen Programmer benutzt Du? Wie sieht Dein Programmcode aus, welche Programmiersprache?
Nach dem Programm wollt ich auch grad fragen, denn das: > Wenn ich den controller an 5V anschliesse lässt sich kein > Spannungsunterschied feststellen(zwische zwei andersgesetzten Bits an > Port A). stinkt schwer nach falsch oder garnicht gesetztem DDRA.
Mein Code sieht folgendermasen aus:
1 | .include "m16def.inc" |
2 | .def akku = r16 |
3 | .equ takt = 8000000 |
4 | .cseg |
5 | rjmp start |
6 | .org $2A |
7 | start: ldi akku, low(ramend) |
8 | out spl,akku |
9 | ldi akku, high(ramend) |
10 | out sph, akku |
11 | ldi akku, $ff |
12 | out DDRA, akku |
13 | loop: sbi porta, 0 |
14 | sbi porta, 1 |
15 | cbi porta, 2 |
16 | rjmp loop |
17 | .exit |
Frage könnte ich mit falschen lockbits meinen controller stören??? julian
Welches Board hast du? Nachdem du offenbar Probleme mit Port A hast und dort die ADC Wandler liegen: AVcc ist korrekt angeschlossen?
Ich hab AVcc gar nicht angeschlossen weil ich dachte das macht keinen unterschied wenn ich den AD-Wandler nicht brauche. hab das obige Programm aber schon auf den ATtiny12 ungeschrieben und das gleiche problem war da julian
http://cgi.ebay.de/AVR-USB-ISP-Programmer-ATMEL-ATMEGA-STK500-Neu-ATTINY_W0QQitemZ220483499132QQcmdZViewItem mein Programmer julian
Julian R. schrieb: > Ich hab AVcc gar nicht angeschlossen weil ich dachte das macht keinen > unterschied wenn ich den AD-Wandler nicht brauche. Es geht nicht im eigentlichen Sinne um den A/D Wandler. AVcc versorgt den Port A. Bei einem Chip müssen immer alle Versorgungsspannungs und Masseanschlüsse belegt werden. Punkt. > hab das obige > Programm aber schon auf den ATtiny12 ungeschrieben und das gleiche > problem war da Eins nach dem anderen, ok? Jetzt debuggen wir erst mal deine Mega16 Schaltung. Also schliess AVcc, AGnd an, leg noch einen 100n Kondensator dazwischen (so wie bei Vcc und GND) und dann solltest du am Mega schon deine Portpins vernünftig ausmessen können.
Julian R. schrieb: > Passt mein Programm soweit, dass ich was messen kann? Definiere "Messen". Du betreibst alle Pins an PORTA als Ausgang. Vom Atmega16 aus was messen im Sinn von Abfragen eines Eingangs kannst du damit nix. Mit einem Multimeter kannst du - bei funktionierendem Hardwareaufbau - allerdings von außen messen, welche Spannungen der Atmega16 an den Pins PA0, PA1 und PA2 aus gibt. Da sollten PA0 und PA1 was anderes zeigen als PA2. http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen
genau das wolt ich wissen ob mein Multimeter verschiedene Spannungen aneigt. Danke
Ist das dann die richtige beschaltung wenn man PortA0 über einen Widerstand an die Basis setzt und über einen zweiten auf GND???
Hi >Ist das dann die richtige beschaltung wenn man PortA0 über einen >Widerstand an die Basis setzt und über einen zweiten auf GND??? Und wo ist der Widerstand ? MfG Spess
1k an RESET kann zu wenig sein und Programmierprobleme machen. Atmel sagt nicht kleiner 4K6. 10K ist üblich. 100 Ohm als Vorwiderstand bei 5V und üblicher LED ist auch zu wenig bei low-current-LEED ist es sogar tödlich zu wenig. Siehe Artikel LED. Kein Basiswiderstand zwischen PA0 und Basis des Transistors kann den PA0 überlasten. Siehe Artikel Transistor und dort *Transistor als Schalter* Welchen Transistor hast du denn verbaut?
Es ist zum verrückt werden, ich schaff es nicht, dass mein Messgerät High anzeigt wenn ich das programm wie oben auf meinen ATMEGA16 programmier. Was hab ich falsch gemacht wenn ich Vcc,GND, und nochmals GND, AVcc,Reset über 10k an Vcc, PA0 und PA1 jeweils mit zwei Transistorstufen wie unten angeschlossen habe??? +5V PA0---R1---B-BC108c-E-----GND | | | | R3 |----|<|----R2---| | LED GND R1 = 1k R2 = 1k R3 = 10k Was hab ich denn noch falsch gemacht, kann etwas mit den einstellungen beim AVR Studio 4 falsch sein. Was zerstört den Controller, worauf muss ich anfänger achten.
Lass das ganze LED-, Widerstand-, Transistor-Gebastel mal weg! Solange du es nicht schaffst, dass du an einem Pin HIGH oder LOW ausgeben oder messen kannst, hat eine Zusatzschaltung keinen Sinn. Bau lieber noch 2 100nF Kondensatoren (Keramik, Kerko) ein. Und zwar wie im AVR-Tutorial (und im Datenblatt) zwischen Vcc (Pin 10) und GND (Pin 11) sowie zwischen AVcc (Pin 30) und GND (Pin 31). Möglichst nahe an den Pins! An Fuses auch vorerst nichts verändern! Die brauchst du nicht, die Werkseinstellung ist jetzt noch OK! Mit WAS misst du? Multimeter zeigen eine Spannung an. Logiktester einen Logikpegel (HIGH, LOW). Was für ein Gerät hast du? WIE misst du? Wo geht die rote Strippe vom Messgerät hin und wo die schwarze? Mein Vorschlag: Programm aus Beitrag "Re: Controller reagiert nicht!" flashen. Multimeter in DC Messbereich, Autorange oder Bereich >5V. Schwarze Strippe an Pin 11 GND dann messen: 1. Rote Strippe an Pin 10 Vcc : Spannung = Wenn das Multimeter keine ca. 5V anzeigt ist was oberoberoberoberoberoberfaul. 2. Rote Strippe an Pin 9 RESET : Spannung = Wenn das Multimeter keine ca. 5V anzeigt ist was oberoberoberoberoberfaul. ISP Adapter abziehen. Nochmal messen. 3. Rote Strippe an Pin 31 GND : Spannung = Wenn das Multimeter keine ca. 0V anzeigt ist was oberoberoberoberfaul. 4. Rote Strippe an Pin 30 AVcc : Spannung = Wenn das Multimeter keine ca. 5V anzeigt ist was oberoberoberfaul. 5. Rote Strippe an Pin 40 PA0 : Spannung = Wenn das Mutimeter keine ca. 3-5V anzeigt ist was oberoberfaul. 6. Rote Strippe an Pin 39 PA1 : Spannung = Wenn das Multimeter keine ca. 3-5V anzeigt ist was oberfaul. 7. Rote Strippe an Pin 38 PA2 : Spannung = Wenn das Multimeter keine ca. 0-1V anzeigt ist was faul. Ergebnisse mitteilen.
Hallo, ich hab mit dem pollin board mal meinen ic und den Programmer angeschlossen, und hab verdacht auf den Programmer. Kann es sein, dass der Programmer durch einen Fehlanschluss geschädigt wurde? Ich hab nämlich mich beim bauen verzählt, jetzt aber wieder korrigiert. Dabei war Spannung auf dem ding. julian
1. Alles ist möglich. Hat es geraucht? Beitrag "Re: Pollin LCD falsche beleuchtung" 2. Die Messungen oben kannst du ohne angeschlossenen USB-ISP-Programmer machen. Man bekommt dann auch einen Eindruck, ob der AVR richtig versorgt wird. 3. Du schreibst jetzt zum 1. Mal was vom Pollin-Board. Ist das jetzt eine andere Hardwaresituation als oben im Anfangsposting, wo du selbst mit rumbeaut hast? Ich finde es abtörnend, wenn der Fragesteller so wichtige Informationen nur stückweise rausrückt (und nicht mal versucht Rückfragen zu beantworten).
Also, ich fang nochmal vom vornean mit erklären. Ich hab eine Programmer-Platine die den µc programmiert.(eigenbau) Wenn der µc programmiert ist, steck ich ihn auf meine "Testplatine" (eigenbau) oder auf mein Steckbrett (Pollin) mit entsprechender schaltung und teste den µc. vor kurzem war ich mit meinem Freund im JUZ, der hat ein Pollin-Board, er hat es geschafft den mikrocontroller daheim über seriellen anschluss zu programmieren, mir im JUZ vorzuführen und ich im JUZ eben mit dem Programmer von mir nicht. Ich kann aber den µc noch auslesen die freqenz draufschreiben ... Daraus entstehen nur zwei Möglichkeiten, 1. Programmfehler. Glaub ich aber nicht, da ich das obrige Programm verwendete. 2. Der programmer tut seine Arbeit nach einem fehlanschluss von mir nicht mehr. hab dabei ein paar pins vertauscht, getestet und korrigiert. Fals Jemand eine Idee hat wie ich ihn testen könnte mir unbedingt schicken Kann mann es vom einen computer auf den µc flashen, und von einem zweiten wieder auslesen???
Julian R. schrieb: > Also, ich fang nochmal vom vornean mit erklären. > Ich hab eine Programmer-Platine die den µc programmiert.(eigenbau) > Wenn der µc programmiert ist, steck ich ihn auf meine > "Testplatine" (eigenbau) oder auf mein Steckbrett (Pollin) mit > entsprechender schaltung und teste den µc. Alle deine drei Schaltungen und konkreten Aufbauten sind hier komplett unbekannt. Es ist unmöglich, gute Tipps zu geben, was daran falsch oder richtig ist. Lass dir was einfallen - Knips die Schaltung, leg sie auf den Scanner oder male sie ab, aber rück' mehr Infos raus... > vor kurzem war ich mit meinem Freund im JUZ, der hat ein Pollin-Board, > er hat es geschafft den mikrocontroller daheim über seriellen anschluss > zu programmieren, mir im JUZ vorzuführen und ich im JUZ eben mit dem > Programmer von mir nicht. Woran machst du den Misserfolg fest? War es der gleiche Mikrocontroller? Hat dein Kumpel Fuses programmiert? > Ich kann aber den µc noch auslesen die freqenz draufschreiben ... Und - was kommt raus? Wie stehen die Fuses? Ist das ausgelesene Programm das gleiche wie das Einprogrammierte? Wenn es HEX-Daten sind, vor dem Vergleich an die Umwandlung in BIN-Daten denken (objcopy, s. Wiki/Artikelsammlung) > Daraus entstehen nur zwei Möglichkeiten, > 1. Programmfehler. Glaub ich aber nicht, da ich das obrige Programm > verwendete. Das "Programm" ist bisher nur ein Quellcode. Bei der Kompilierung zur tatsächlich übertragenen Hex-Datei kann auch noch etwas schiefgehen z.B. falscher µC-Typ eingestellt. > 2. Der programmer tut seine Arbeit nach einem fehlanschluss von mir > nicht mehr. Erkennen tust du das wie? > hab dabei ein paar pins vertauscht, getestet und korrigiert. Hört sich wie ein Rezept für ein Disaster an. Die verwendete PC-Schnittstelle (welche?) lebt noch? > Falls Jemand eine Idee hat wie ich ihn testen könnte mir unbedingt > schicken 1. Schaltpläne zeigen und auf Kommentare warten. Besser noch: zusätzlich Aufbauten zeigen. 2. Aufbauten mit kommentierten Schaltplänen vergleichen. 3. Tipp zu Messungen annehmen. Messen. Berichten. Hast du noch genug Bauteile für diesen geheimnisvollen Programmer, den du uns nicht zeigen willst? Wenn ja, bau den neu auf, Dann ist diese nagende Ungewissheit weg. Ich würde mit dem Neuaufbau mindestens warten bis 1. und 2. erledigt sind. Eher noch bis 3. erledigt ist. Vielleicht ist der Programmer garnicht Schrott. > Kann mann es vom einen computer auf den µc flashen, > und von einem zweiten wieder auslesen??? Ja, meistens, ausser die Lockbits (Datenblatt...) als Ausleseschutz vor Programmklau sind gesetzt.
Die Spannungsversorgung Bild0504.jpg sieht gut aus. Brauchen wir im Moment nicht. Der USB-ISP-Programmer kann den Atmega16 beim Programmieren auf dem Programmierboard versorgen. Auf der Testplatine Bild0506.jpg kann ich nix genaues erkennen. Ist aber nicht schlimm, denn die Testplatine brauchen wir im Moment nicht. Auf dem Steckbrett Bild0508.jpg kann ich nix genaues erkennen. Ist aber nicht schlimm, denn das Steckbrett brauchen wir im Moment auch nicht. Als erstes geht es nur um das Programmierboard Bild0505.jpg. Du sagst, dass du den Atmega16 auslesen aber nicht beschreiben kannst. Was kommt beim Auslesen raus - zeige einen Screenshot der Fuseseinstellung wie auf den Seiten unter AVR Fuses. Lies das Programm aus dem Atmega16 aus und hänge es an deine nächste Antwort. Durch Disassemblieren oder Vergleich mit einem hier übersetzten Quellcode können wir nachsehen, ob es das "richtige" Programm für den "richtigen" AVR ist. Nur zur Sicherheit: Auf welchem Board hat dein Kumpel programmiert - seinem Steckbrett (das er bei Pollin gekauft hat) oder einem der Boards Pollin Funk-AVR-Evaluationsboard oder [[Pollin ATMEL Evaluations-Board]]. Die versteht man nämlich üblicherweise unter "Pollin-Board". Für Steckbrettaufbauten gibt es prima Zeichenprogramme: http://www.mikrocontroller.net/articles/Breadboard#Weblinks Ich finde das Online DES-Steckboard am besten. So wie im Anhang könnte die nächste Schaltung auf dem Steckbrett aussehen, die nach dem Programmiertest durchzumessen ist.
Danke für den Tipp mit dem virtuellem Board. >Du sagst, dass du den Atmega16 auslesen aber nicht beschreiben kannst. Falsch, ich kann ihn auch beschreiben. >Nur zur Sicherheit: Auf welchem Board hat dein Kumpel programmiert - >seinem Steckbrett (das er bei Pollin gekauft hat) oder einem der Boards >Pollin Funk-AVR-Evaluationsboard oder Pollin ATMEL >Evaluations-Board. Die versteht man nämlich üblicherweise unter >"Pollin-Board". Ja er hat auf dem Pollin ATMEL Evaluations-Board programmiert.
Das test.hex ist dieses kurze Programm (in den Debugger des AVR Studio geladen und angezeigt):
1 | +00000000: EF0F SER R16 Set Register |
2 | +00000001: BB0A OUT 0x1A,R16 Out to I/O location |
3 | +00000002: 9AD8 SBI 0x1B,0 Set bit in I/O register |
4 | +00000003: 9AD9 SBI 0x1B,1 Set bit in I/O register |
5 | +00000004: CFFD RJMP PC-0x0002 Relative jump |
Das entspricht dem sichtbaren Quelltext in Unbenannt1.jpg. Wenn du das test.hex so in den Atmega16 reingeschrieben hast und dann wieder ausgelesen hast, dann funktioniert dein USB ISP Programmer und dein Programmierboard. Die Fuses in Unbenannt1.jpg habe ich mit dem Engbedded Atmel AVR® Fuse Calculator (http://www.engbedded.com/fusecalc/) kontrolliert. Dein Kumpel hat eventuell die JTAG-Schnittstelle abgeschaltet und das ist hier unwesentlich. Wesentlich ist, dass er die Taktquelle auf dem internen RC-Oszillator gelassen hat und nicht auf den Quarz auf seinem Pollin-Board umgestelt hat. Hätte er das gemacht, würden dein Programmierboard und deine Testschaltungen mangels Quarz nicht funktionieren. Als nächstes baue den programmierten Atmega16 auf das Steckbrett und verwende die Schaltung aus dem Beitrag "Re: Controller reagiert nicht!" Mach dann die Messungen aus dem Beitrag "Re: Controller reagiert nicht!" Es kann sein, dass bei grob falscher Bedrahtung die Pins PA0 und PA1 Schaden genommen haben. Das kann man mit den Messungen herausbekommen.
Der Programmer dürfte dann noch funktionieren, oder. Ich hab es auf den µc geladen, strom weg(USB raus und danach wieder rein), ausgelesen und verglichen. julian
Glückwunsch für deinen ersten erledigten Bug! Weiterhin viel Spaß! http://thenextweb.com/2008/11/20/the-worlds-first-computer-bug/
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.