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
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?
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.
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... ;)
> 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?
> 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.
> 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!!!
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. ;)