| Autor |
Total Ratlos: Controller läuft nicht Suche nach: controller (3563) |
|
|
|
|
BID = 360578
robodriver Stammposter
    Beiträge: 217
|
|
Hallo Leute,
ich bin mittlerweile total am Verzweifeln... ich habe eine Schaltung mit 3 uC aufgebaut.
Ein uC ist ein ATMega8 mit externem Quarz angeschlossen
der zweite uC ist auch ein ATMega8 der seinen Takt über den XTAL1-Pin vom ersten Controller bekommt
der dritte uC ist ein AT90S2313 der ebenfalls seinen Takt über den XTAL1-Pin vom ersten Controller bekommt.
nun das Problem:
uC 1 und 2 laufen ohne Probleme.
uC 3 läuft aber irgendwie gar nicht.
hier erstmal der Quellcode des 3. Controllers:
| Code : |
$regfile = "2313def.dat"
$crystal = 4000000
'DDR = &B76543210 ; 0=Eingang ; 1=Ausgang
Ddrb = &B11111111
Ddrd = &B11101111
Portb = &B01000000
Portd = &B01000001
Do
Waitms 500
Portb = 64
Waitms 500
Portb = 8
Waitms 500
Portb = 16
Waitms 500
Portb = 104
Waitms 500
Portb = 0
Waitms 500
Portb = 80
Waitms 500
Portb = 96
Loop
End
|
|
Ist ja soweit ein einfaches Programm. Wenn ich die Spannung einschalte, dann setzt der Controller den PortB manchmal auf 0, manchmal auf 96 und manchmal auf 64. (nur diese 3 varianten sind bisher aufgetreten) Aber ändern tut sich an dem Port-Status gar nichts... Eigentlich sollte er ja nach 0,5 Sekunden wechseln, aber es tut sich auch nach 5 Minuten nix.
Was mir aufgefallen ist: der PortD wird immer richtig gesetzt, was ja darauf schließen lässt, das zumindest die ersten Zeilen ordnungsgemäß ausgeführt wurden.
Um einen Hardware fehler bei der Schaltung auszuschließen, habe ich auch über einen Adapter einen ATMega8 an den Steckplatz des 2313er gesteckt und siehe da, der Mega8 läuft dort ohne Probleme. Warum klappt das also nicht mit dem 2313er?
Kaputt ist der 2313er auf keinen Fall, habs schon mit mehreren Probiert, die in einer anderen Schaltung mit einem anderen Programm Fehlerfrei laufen...
Bitte helft mir so schnell wie möglich...
vielen Dank
Robodriver
PS: wen es interessiert, im Anhang noch der entsprechende Assamblercode |
|
BID = 360592
Ltof Inventar
     
Beiträge: 9386 Wohnort: Hommingberg
|
|
Da fehlt noch ein Schaltplan.
Eine recht wahrscheinliche Ursache für so ein Verhalten sind beispielsweise fehlende Blockkondensatoren.
Gruß,
Ltof
_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor) |
|
BID = 360603
robodriver Stammposter
    Beiträge: 217
|
Hallo,
also mit dem Schaltplan häng ich zur Zeit etwas hinterher, den ersten Controller mit allem drum herum hab ich schon fertig gehabt...
Die anderen beiden habe ich jetzt noch schnell mit allen wichtigen Bauteilen angefügt... (nicht wundern, die I/Os sind eigentlich alle belegt, habs nur aus Zeitgründen erstmal weg gelassen
mit den Blockkondensatoren ist ne gute Idee wo soll ich die hin machen? direckt am Controller zwischen + und - ?
so wie beim erten uC ?
|
BID = 360609
robodriver Stammposter
    Beiträge: 217
|
so, hab jetzt noch zwei Abblockkondensatoren bei den anderen beiden uC angelötet... (zwischen Vcc und GND)
jetzt wird beim Einschalten IMMER der Port B auf &B01000000 gesetzt (also 64) ich denke aber mal, das sind die 64 die bei der Initialisierung oben gesetzt werden.
Die Hauptschleife wird allerdings nach wie vor nicht ausgeführt...
Port B bleibt immer unverändert auf &B01000000 stehen.
Woran könnte es noch liegen?
|
BID = 360611
Jornbyte Moderator
      
Beiträge: 7345
|
Wie hast du die Schaltung aufgebaut, Lochraster? Die Taktleitung muss so kurz wie möglich sein und sollte sich nicht mit anderen Leitungen kreuzen.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 360612
robodriver Stammposter
    Beiträge: 217
|
also die Taktleitung vom ersten Controller zu den anderen beiden ist in etwa 20cm lang.
Könnte es vielleicht sein, dass das ankommende Taktsignal einem ATMega8 gerade so ausreicht um zu laufen, während ein AT90S2313 schon streikt?
Das währe etwas was ich mir vorstellen könnte...
Wenn ja, was kann ich dagegen machen? Vielleicht 2 Leitungen verlegen, damit sich der Leitungsquerschnitt verdoppelt? die 20cm, kann ich leider nicht verkürzen...
|
BID = 360619
Jornbyte Moderator
      
Beiträge: 7345
|
20 cm kannst du vergessen. Wie hoch ist der Takt? 4 MHz? Warum verwendest du nicht den internen Takt? Da bist doch auf der sicheren Seite.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 360630
robodriver Stammposter
    Beiträge: 217
|
Interner Takt? wie meinst des? irgendwo muss der Takt doch her kommen...
also ich hab jetzt mal das einfachste gemacht: ich habe dem 2313er einen eigenen Quarz mit Kondensatoren gegeben.
Resultat: PortB wird ebenfalls immer auf &B01000000 gesetzt, das Programm läuft aber trotzdem nicht.
Der Schwingkreis funktioniert einwandfrei. Das habe ich wieder mit einem ATMega8 über den Adapter getestet...
Also sieht es jetzt doch wieder nach einem Software-Problem aus oder?
|
BID = 360631
Jornbyte Moderator
      
Beiträge: 7345
|
Ach so, ja, 2313. Ist der Reseteingang richtig beschaltet?
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 360633
robodriver Stammposter
    Beiträge: 217
|
also der Reset lieg über einen Pull-Up auf 5 Volt.
(hab ich auch nachgemessen, der Pin hat wirklich 5 Volt)
und in den High-Fuses ist der Pin auch als Reset Konfiguriert und nicht als I/O Pin
|
BID = 360648
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Bist du dir sicher, dass der Takt 4MHz beträgt? Wenn nein, dann kann es sein, dass der Aufruf von waitms 500 einfch zu lange dauert. Bascom rechnet anhand der Taktfrequenz aus, wieviele Zyklen verzögert werden müssen, um auf die (sehr ungefähre...) Verzögerungszeit von 500ms zu kommen. Beträgt der Takt tatsächlich mehr oder weniger, dann schwanken auch die Zeiten später stark.
_________________
|
BID = 360650
Jornbyte Moderator
      
Beiträge: 7345
|
Du verwirsst mich etwas. Ist es ein 90S2313 oder ein Tiny2313?
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 360652
robodriver Stammposter
    Beiträge: 217
|
Es ist ein AT90S2313.
Also auf dem Angeschlossenen Quarz steht : 4,0000
Also sind es 4 MHZ. Bei dem ATMega8 haut die Zeitverzögerung ja ungefähr hin und der häng am gleichen Takt...
|
BID = 360654
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Dann ist die Strecke einfach zu lang!
Der Quarz sollte möglichst nahe an den Pins liegen (XTL1 und XTAL2). außerdem müssen da 2 Kondensatoren ran, steht alles im Datenblatt. (zw. 12pf und 27pf)
_________________
|
BID = 360660
robodriver Stammposter
    Beiträge: 217
|
wie gesagt, mittlerweile hab ich dem AT90S2313er einen eigenen Quarz gegeben. So das er jetzt einen eigenen Takt hat.
Und wie gesagt, der Takt wird auch richtig erzeugt, denn ein ATMega8 den ich über den Adapter an die Stelle gesteckt habe, läuft einwandfrei. nur der AT90S2313er zuckt kein Bisschen
woran kann das nur liegen?
|