Hallo, Habe ein kleines Programm für einen Mega8535 geschrieben, welches die Display-Routinen aus dem Tutorial dieser Seite benutzt. Jetzt bin ich auf einen Mega32 umgestiegen, und die Display-Ansteuerung funktioniert nun nicht mehr. Das Display(4x16) zeigt lediglich die beiden schwarzen Balken an. Interrupts musste ich bis jetzt noch nicht verwenden, womit ich diesen Fehler ausschließen kann. Vielleicht hatte ja jemand hier das gleiche Problem und kann mir weiterhelfen. Danke Sascha
Hast du die gleichen Ports verwendet? Gleichen Quarz? Sind die Pinbelegungen identisch? MfG Falk
Ja, alles identisch. Lediglich die uC getauscht und fertig... Hatte nicht damit gerechnet, dass es komplikationen gibt. Habe auch eine multiplex-Tastatur dran, die zu funktionieren scheint. Ist lediglich das Display, welches versagt. Steck ich den 8535 wieder ins Board, funktioniert alles... Sehr suspekt, oder?
Haste auch die Fuses umprogrammiert? Könnte es sein dass der Neue mit internem Takt (1MHz) arbeitet?
Oh je, Nicht schon wieder irgendwelche Fuses... Also brennen tu ich das Ding mit Ponyprog. Angeschlossene LED's leuchten auch so, wie sie programmiert wurden. Scheint, als muss ich bei Null anfangen und das Board so umlöten, dass ich LED's für jedes Bit des ominösen Ports benutze um sicherzustellen, dass auch tatsächlich das rauskommt, was ich möchte. Von Fuses habe ich ehrlich gesagt überhaupt keinen Plan. Das funktionierte ja auch mit dem 8535 wunderbar...
Du mußt in den Fuses einstellen, dass er mit einem externen Quarz laufen muß, sonst wird es nicht funktionieren. Wo man die in Ponyprog einstellt weiss ich leider nicht. Umlöten mußt du sicherlich nichts, nur die Fuses richtig setzen, die sind im Datenblatt gut beschrieben. Viel Erfolg, Christian
Hast Du das für den 8535 compilierte (bzw. assemblierte) Programm einfach auf den Mega32 gespielt oder hast Du es für den Mega32 neu compiliert (bzw. assembliert)? Wenn nicht, dann wundert mich gar nichts...
Einer der wichtigsten Unterschiede liegt übrigens in der Speichergröße: Beim Mega8535 kann noch der komplette Programmspeicher mit relativen Sprüngen angesprochen werden, beim Mega32 nicht mehr. Deshalb funktioniert ein Programm, das für einen µC mit < 8 KB Flash geschrieben wurde und das rjmp-Befehle enthält (was eigentlich immer irgendwie der Fall ist), mit einiger Wahrscheinlichkeit nicht auf einem mit > 8 KB Flash. Dasselbe gilt für die Interrupt-Vektoren, die bei den AVRs mit > 8 KB Flash aus eben diesem Grund 32 Bit lang sind. Da Du jedoch nach eigenen Angaben keine Interrupts benutzt, sollte das nicht zu Deinem Problem führen.
Hi, Das Programm habe ich mit wavrasm geschrieben und assembliert. Selbstverständlich habe ich die Mega32-Standard-Routinen eingebunden. Port C nutze ich tatsächlich zur Ansteuerung des Display's. Den Controller programmiere ich mit PonyProg über ISP - JTAG-aktiviert? Sollte ich doch lieber zu Lego-Duplo greifen? ;) Werd mal andere Sprungbefehle verwenden und hoffen, dass da 'der Frosch die Locken' hat. Eben habe ich gesehen, wo man bei PonyProg die Fuses setzen kann - Das heißt also tatsächlich Datenblatt-wälzen... Meld mich, wenn ich schlauer bin.
Soweit ich weiss, ist beim ATMEGA32 im Auslieferungszustand JTAG immer aktiv. Zum Deaktivieren bei Ponyprog die JTAGEN-Fuse ausschalten. Achtung: Haken bei Ponyprog bedeutet 0 => Fuse programmiert Gruß Volker
Ihr seid wahre Helden!!! Bei Ponyprog das JTAGEN-Bit gelöscht, Programm rübergeschoben und siehe da --> Funzt! Hip Hip - Hurra! Danke für eure Tips! Sascha
Oh oh... Soweit so gut. DasProgramm lief wie gesagt. Allerdings eher in Zeitlupe - Also als Experimentierfreudiger Geselle mal eben die Duse-Bits so gesetzt, dass mein externes 8MHz Quarz benutzt wird --> Zack, aus die Maus... Egal - nächster Mega32 ins Board --> Zeitlupe des Programmablaufes --> Fuses geändert --> Tot. Lange Rede, kurzer sinn: Der Dritte und letzte ist auch platt... Schnell im Forum gesucht und siehe da, einen externen Quarz an xtal anschließen und es sollte sich wieder richten lassen. Aber ich habe doch bereits besagten 8MHz Quarz extern angeschlossen?! Aus den Beiträgen werde ich nicht schlau. Gibts eine Rettung für meine AVR´s?
Nicht einen externen Quarz anschliessen. Da hast mit ziemlicher Sicherheit deine Mega32 auf externen 'Taktgenerator' eingestellt. Das ist aber was anderes als ein externer Quarz. In Kürze: Ein Quarz benötigt zum Schwingen noch etwas Aussen-rum-Beschaltung. Diese Beschaltung ist im AVR enthalten und braucht nur eingeschaltet werden. Ein Taktgenerator hingegen braucht nichts. Der schwingt ganz von Alleine, daher wird diese Aussen-rum-Beschaltung abgeschaltet. Genau das hast du gemacht, du hast deine Aussen-rum-Beschaltung abgeschaltet. Nur ohne die kommt der Quarz nicht ins Schwingen. Blöd ist jetzt nur, dass du das bei allen 3 Megas gemacht hast. Ansonsten hättest du einen programmieren können, dass er einen Pin toggelt. Mit diesem Signal gehst du dann an den XTAL1 Eingang und die Megas sollten sich wieder melden. Alles was sie wollen ist eine Frequenz an XTAL1, die schneller als 50 Hz ist :-) Moment mal. Du hast doch noch einen 8535. Mit dem könntest du das machen: Pin toggeln und mit diesem Takt die Mega32 versorgen (an XTAL1) Ach ja: Die korrekte Fuse Stellung ist 'external Crystal' nicht 'external Clock'. Im PonyProg heist das: Alle Haken bei CKSEL0 bis CKSEL3 wegnehmen.
Danke, Das werde ich leider erst morgen in die Tat umsetzen können. Bin aber froh jetzt nicht die Vorräte von _ollin aufkaufen zu müssen!!! Meld mich, sobald ich das Problem gelöst und das nächste erschaffen habe. Nochmals vielen vielen Dank! -Sascha
So, 8535 setzt jetzt PortA,0 abwechselnd high - low. Takt abgegriffen und Mega32 xtal zugeführt, aber nichts passiert... werd mir wohl ein STK500 kaufen müssen. Damit kann ich die Mega32 doch auch wieder reanimieren, oder?
Hast du's XTAL1 zugeführt? Und nicht vergessen: die ISP-Frequenz darf max. 1/4 der Taktfrequenz sein, sonst geht's nicht! Am Besten mit der niedrigsten ISP-Frequenz probieren.
Welchen Programmer hast du? Bei Ponyprog kann ich nicht weiterhelfen, habe den AVRISP und STK500.
Aha. Ich nutze leider wirklich Ponyprog. Da kann man derartige Optionen nicht einstellen. Hat denn das stk500 keinen ISP-Programmer onboard? Kann man den avr-isp selbst löten? Habe mir extra ein zweites eva-board besorgt um den Takt für die 32er zu erzeugen. Aber wie es aussieht muss wirklich ein anderes Board für diese Fälle her.
STK500 hat ISP onboard, aber auch Parallel und seriell High-Voltage, da braucht's keinen Takt am µC. Den AVR-ISP kann man wohl eher nicht löten, die Anschaffung lohnt sich aber auf alle Fälle! Hast du keinen Quarz-Oszillator, so 1 bis 4 MHz 'rumliegen? der tut's auch. Oder einen Frequenzgenerator. Man könnte auch die Soundkarte vom PC vergewaltigen. Frequenzen gibt's überall.
> Da kann man derartige Optionen > nicht einstellen Doch kann man. Zumindest ungefähr. Geh auf das Verzeichnis in dem du PonyProg installiert hast. Dort gibt es eine PONYPROG2000.INI Die machst du mit dem Notepad auf. Dann suchst du den Eintrag SPIBusSpeed und setzt den mal auf SLOW SPIBusSpeed=SLOW
Bin mehr so der Hochspannungsmensch und im KV-Bereich zuhause. Beschäftige mich noch nicht so lange mit uC, weswegen ich auch nicht viel Krams rumliegen habe. Einen Takt erzeuge ich ja aber auch mit dem 8535. Aber egal, wie ich die Frequenz auch einstelle, es tut sich einfach nichts bei den 32ern. Gibt es keine einfache Möglichkeit die Dinger zu resetten? Oder ich kauf mir noch ne handvoll 32er. Muss ja nur noch meine Projektarbeit abschließen... ;)
Kennst du niemend mit einem STK500 oder einem Programmer wie z. B. GALEP in deiner Nähe? Damit geht's am Einfachsten.
> Gibt es keine einfache Möglichkeit die > Dinger zu resetten? Bedenke. Der Lösungsvorschalag beruht auf der geratenen Annahme, dass du die Fuses auf externen Oszillator gestellt hast. Diese Annahme trifft oft zu, muss aber nicht. Weist du noch, wie du die Fuses gestellt hast?
IHR SEID SO GUT!!!! Muss nur mal eben alles testen, meld mich gleich wieder. =)
> So, 8535 setzt jetzt PortA,0 abwechselnd high - low.
Nicht das ich dir nicht trauen würde :-)
Bist du sicher, dass das auch funktioniert. Mit nem
Multimeter nachgemessen? Du müsstes so ungefähr 2.5 Volt
am Ausgang messen können.
Das dann auf Pin 13 vom Mega32.
Pin 12 lässt du offen.
So mein Vorschlag wie ich das immer mache, ich besitze ein Multimeter mit Frequenzgenerator der spuckt zwar nur hausnummern aus aber egal das sind halt ein paar Kilohertz es langt aber, dann holst du dir von ROWALT.de den twinavr und baust diesen ganz kleine aus drei widerständen bestehenden Parallelportprogrammierer auf und schliest das an die Masse vom Multimeter schliesst du an Masse bzw. 0V an den Plus an den Xtal 1 dann kannste mit twinAVR soweit drauf zugreifen, dass man die Fuses ändern kann. Wenn du kein solch ein Multimeter hat tuts auch ein NE555 in Standardbeschaltung im Internet gibts seiten über die man di ungefäre Frequenz errechnen kann. Gruss JOCHEN S. www.RS485-Hausbus.de.vu
So, Mega32 laufen wieder. Allerdings nur mit der externen Taktleitung. Muss mal eben noch das Datenbaltt nach den richtigen Einstellungen für das externe Quarz durchforsten...
@Jochen Ich hoffe du verzeihst mir, aber ich hab da mal ein paar Satzzeichen eingefügt. Ohne die versteht Sascha wahrscheinlich nur Bahnhof. Ich hab das ganze auch 3 mal lesen müssen und nur mit dem Wissen, was du wahrscheinlich machen wirst, ist es gelungen die Beschreibung zu entziffern. > ich besitze ein Multimeter mit Frequenzgenerator. Der spuckt zwar > nur hausnummern aus, aber egal das sind halt ein paar Kilohertz > es langt aber. Dann holst du dir von ROWALT.de den twinavr und baust > diesen ganz kleine aus drei widerständen bestehenden > Parallelportprogrammierer auf und schliest das an. Die Masse > vom Multimeter schliesst du an Masse bzw. 0V an. Den Plus an den > Xtal 1. Dann kannste mit twinAVR soweit drauf zugreifen, dass man > die Fuses ändern kann.
> So, Mega32 laufen wieder.
Na siehst du.
Im PonyProg die Haken bei allen CKSELx wegnehmen.
Achtung: Nicht vergessen. Bevor du an den Fuses rumspielst
immer zuerst die Fuses vom Controller lesen!
Ja, werd ich machen. Dank Euch läuft nun alles wieder!!!!!!!!!!!!!!!!!!!!!!!!! Allerdings läuft der MEGA32 nur mit dem externen Takt vom 8535, wenn ich die Fuses CKSEL3 bis CKSEL0 lösche. Mit dem internen Takt ist er zu langsam, aber läuft.
Klar das verzeihe ich jedem, war halt Q&D (quick and dirty). Hatte noch was dringendes zu erledigen, wollte denoch meine Hilfe anbieten, scheint sich aber soeben wohl schon geklärt zu haben. Gruss Jochen S. www.RS485-Hausbus.de.vu PS: Geht jetzt zwar Offtopic, aber weiss jemand wie man als angemeldeter User so eine Art Signatur für seine Foreneinträge erstellen kann. Finde in den Usereinstellungen nichts in der Richtung.
Hast vielleicht den Teiler /8 noch aktiv? Hat der m32 den? Dann würde er wohl mit 1MHz laufen.
> Allerdings läuft der MEGA32 nur mit dem externen Takt vom 8535, > wenn ich die Fuses CKSEL3 bis CKSEL0 lösche. Beziehst du dich mit 'löschen' jetzt auf das Datenblatt oder auf PonyProg. Im PonyProg ist das alles genau umgedreht. Wenn im Datenblatt eine 0 steht, dann muss dafür im Pony ein Häkchen gesetzt werden. CKSEL3 - CKSEL0 alle Häkchen weg CKOPT ein Häkchen hin SUT1 - ein Häkchen SUT0 - kein Häkchen (CKSEL0, SUT1, SUT0 regeln die Einschwingzeit bevor der µC loslegt. Mit der Einstellung oben sollte das eigentlich die längste mögliche Einschingzeit sein) Quarz dran. Jeweils 22 pF nach Masse 22 pF || +----||------+-----------> XTAL 1 | || | | | | ******* Quarz | ******* | | | || | +----||------+-----------> XTAL 2 | || | 22 pF | --+----- GND Sollte eigentlich ohne Probleme gehen.
> Hat der m32 den?
Die heist doch normalerweise CLKDIV, oder nicht?
CLKDIV gibts nicht.
Die Frequenz vom internen Oszi wird ebenfalls mit
CLKSELx eingestellt.
Alle Häkchen gesetzt, wie angegeben... Aber irgendwie kann Ponyprog dann nicht mehr auf den Controller zugreifen. (unknown Device) - Es sei denn, ich takte wieder mit dem 8535... Ich schau mal, ob ich den Fehler finde, falls nicht, weiß ich ja, wo ich Hilfe bekomme. ;) Vielen Dank!!!
>Die heist doch normalerweise CLKDIV, oder nicht? Jo, heißt CKDIV8 (Im Progger vom AVR-Studio) und ist beim Tiny2313.
Hab´s jetzt... Habe das Quartz auf meiner Übungs-Platine zerbraten. Werd mal ein anderes einlöten und mich dann an den funktionierenden, dank Eurer Hilfe wiederbelebten 32ern erfreuen. ;)
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.