PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MEGA8 hängt sich auf



rathma
05.04.2007, 11:36
Hallo,
ich hab ein kleines problem und zwar will ich mit einen mega8 daten über spi senden. das programm läuft fehlerfrei bis es beim ersten spiout ankommt.

mache ich dann ein reset des mega8 läuft er stundenlange fehlerfrei weiter.
das problem macht er nur beim einschaten.

kann ich irgendwelche fusebits falsch gesetzt haben?

gruss
markus

wanderer
05.04.2007, 12:35
Hi,

kannst du den Code evtl mal reinstellen? Vielleicht ist da ja irgendwo was verkehrt oder evtl auch die Schaltung...

Gruss,

wanderer

uwegw
05.04.2007, 12:44
Riecht nach irgendwelchen nicht initalisierten Registern oder Speicherplätzen...

rathma
05.04.2007, 23:47
'Grundeinstellungen und Variablendefinitionen
$baud = 9600 'Baudrate der UART: 9600

$regfile = "m8def.DAT" 'ATmega8-Deklarationen
$crystal = 8000000 'Quarz: 8 MHz


Declare Sub Mcp2515_init()



'Aliasse für die Ports
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Clockrate = 4 , Noss = 1 'Test mir Atmega wegen HardwareSPI

Cs_line Alias Portd.3


Config Cs_line = Output 'ss cs
Print "Hallo SPI TEST(CAN) RX Stauts 250kbits für atmega8 register auslesetest"

Spiinit
Set Cs_line
Waitms 20

Mcp2515_init




Sub Mcp2515_init()

Dim Mcp2515_reset As Byte
Mcp2515_reset = &HC0

Print "init"

Reset Cs_line
Spiout Mcp2515_reset , 1
Set Cs_line

print "init fertig"

....usw aber soweit kommt das programm ja leider nicht

end sub



beim einschalten schreibt er mit noch im terminal init
und erst nach einen reset nochmal init und auch dann init fertig.

bei den fuses hab ich mich auch ein bischen gespielt. aber immer das gleiche ergebniss: im augenblich verwende ich cksel=1111 und sut=11(ext quarz startup16k ck+65ms)

ich hab auch mal zum test den watchdog einzustellen, da macht er schon einen reset mitten in der printausgabe von "Hallo...."


gruss
Markus

rathma
10.04.2007, 20:31
keiner eine idee?
als hardware verwende ich von pollin.de das experimentierboard 2

der mega8 hängt sich sowohl beim ersten start mit und auch ohne baustein am spi bus aus(somit schließe ich mal ein hardwarefehler aus)

gruss
markus

Stromi
10.04.2007, 22:44
Kennst du den:
http://palmavr.sourceforge.net/cgi-bin/fc.cgi
Vorsicht: Haken Bedeutung ist verwirrend.....
Ansonsten weiß ich auch nicht warum es nach einem Reset dann funktioniert....
Stack kann es eigentlich auch nicht sein, würde dann ja immer nicht gehen.
Alle Anlaufbedingungen können es sein, und die haste bestimmt mal in den Fuses versucht.
Pollin hat zum Bord ein PDF wie es Fuse-Standart ist.
MfG

Ratber
10.04.2007, 23:24
@Rarthma

Ne Ferndiagnose ist nicht leicht wenn man das Projekt nicht kennt.

Eine Möglichkeit ist das deine komplette Schaltung beim Einschalten nicht schnell genug betriebsbereit ist.
Bei "noch" instabiler Versorgung usw. kann es da zu Problemen kommen.

Testen kannst du das wenn du ziemlich am Anfang deines Programmes einfach mal ein Wait 1 (1 Sekunde) einfügst.

Ein Versuch schadet nicht und kann wenigstens diese Möglichkeit ausschließen.


@Stromi

auf der Seite kann ich zwar nen Controller auswählen aber dann passiert nix mehr.
Is das zufällig "Designed 4 MS IE only " also völlig vorbei an jedem Standard ?

Stromi
11.04.2007, 08:49
Standart.....äähh weiß nicht :-)
Aber es gibt ja noch das hier:
http://www.mikrocontroller.net/articles/AVR_Fuses
und bei PonyProg kannst du auch schauen.
Vorsicht: Bei der einen oder anderen Ansicht ist ein Haken angewählt, bei einem anderen Program bedeutet er abgewählt.

Ratber
11.04.2007, 09:05
Ja,um die Fuses gehts mir nicht,da komm ich längst alleine klar ;)

Mir ging es nur um die Seite die für "nicht" IE konforme Broswer offensichtlich nicht nutzbar ist.(Opera vieleicht)

Ich hab mir das mal vom Arbeitsplatzrechner angesehen.
Is ja Ugly der Code.
Sieht das so aus wenn man mit Frontpage arbeitet ?
Brrrrr :lol::lol:

Naja,hat sich erledigt.

rathma
11.04.2007, 10:01
ja die seite http://palmavr.sourceforge.net/cgi-bin/fc.cgi kenn ich, von der hab ich auch die fuse einstellung :-) ich bespiel den mega8 mit einen galep, da kann ich die einstellungen von der hp 1:1 übernehmen ohne invertieren zu müssen.


@Ratber
zu meinen projekt gibts nicht viel zu sagen, ich will via spi bus einen mcp2515 ansprechen, das klappt auch soweit alles problemlos bis auf das, das beim ersten einschalten das programm bzw der mega8 sich bei spiout aufhängt
ein spiinit und ausgaben über den urat macht er vor den spiout problemlos

ein wait 1 hatte ich schon mal drin, ich werds aber heute noch mit einen wait 10 gleich am anfang von programm testen


gruss
Markus

Ratber
11.04.2007, 10:45
Ja,der Uart hat ja nix mit dem SPI zu tun.

Könnte auch sein das die Komunikation zum mcp2515 hängt (Protokollfehler wenn man überhaupt von Protokoll sprechen kann)

Wie gesagt,aus der Ferne gibt es zig Möglichkeiten.

rathma
11.04.2007, 13:43
Könnte auch sein das die Komunikation zum mcp2515 hängt .

ich weiss jetzt nicht ob ich einen denkfehler hab, aber wenn ich mit meinen mega8 daten auf den bus sende, da bekommt der avr doch gar nichts mit ob was dran hängt oder nicht. und auch beim empfangen ist es doch rein hardwaretechnisch den avr egal ob was dran hängt oder nicht, da das clock signal ja nicht der mcp2515 macht und er empfängt hald dann auch als wert FF (da der avr den eingang auf pullup setzt)

ich habe eher die vermutung, das es an irgendeinen stack oder so liegen kann, hab leider in dieser richtung noch gar keine erfahrung, da ich bis jetzt eigendlich nur immer mit den at90s2313 was gemacht habe und da hab ich bascom auf den standard einstellungen lassen

Ratber
12.04.2007, 00:27
ch weiss jetzt nicht ob ich einen denkfehler hab, aber ..........usw.

Ja,wenn du reines SPI ohne jegliches Protokoll verwendest dann ist das natürlich egal.



>ich habe eher die vermutung, ...........usw.

Ja,der Stack ist auch möglich.
Leider kann man das an deinem Codefetzen nicht sehen.

Ich kann immer nur empfehlen "alle" Einstellungen im Quelltext zu machen und die Defaultwerte des Compilers nicht zu nutzen.

Viele machen das Anfangs und solange sie ihren Lieblingscontroller (Momentan oft M8,M16 oder M32) nutzen passiert da auch nicht viel.
Spätestens wenn dann der Controller gewechselt wird rächt sich diese Bequemlichkeit denn die Einstellungen sind längst vergessen.
Schon liegt man auf der Nase und weiß nicht warum.
Der Nächste (Kleine) Stolperstein ist dann die wilde Suche nach den Settings die man dafür im Quellcode setzen muß.


Falls es wirklich der Stack ist gibt es ja nur zwei primäre Möglichkeiten.
Zum einen die vom Compiler nicht erkannte Belegung und zum anderen die allseits beliebten Sprünge aus Unterprogramen heraus.
Der Rücksprung bleibt dabei im Stack womit dann das nächste Return an die falsche Adresse geht oder der Stack recht flott überläuft.
Aber das ist alles nur geraten denn für Aussagkräftige Hilfe muß man schon den Quelltext kennen.

Such einfach mal in Ruhe,vieleicht findest du ja die Stelle.

Vitis
12.04.2007, 14:59
Hardware oder Software-SPI?

Stromi
12.04.2007, 15:37
laut Codefetzen Hardware s. O.

Vitis
13.04.2007, 18:19
also n Programm ohne Mainloop möcht mir irgendwie nicht recht gefallen.
Mit der Sub ohne Übergabewert hatt ich shconmal Ärger, weiß der Geier warum,
wenn eh keine Parameter übergeben werden tuts dann auch n gosub.
Probiers mal so:




'Grundeinstellungen und Variablendefinitionen
$baud = 9600 'Baudrate der UART: 9600

$regfile = "m8def.DAT" 'ATmega8-Deklarationen
$crystal = 8000000 'Quarz: 8 MHz


'Aliasse für die Ports
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Clockrate = 4 , Noss = 1 'Test mir Atmega wegen HardwareSPI

Cs_line Alias Portd.3


Config Cs_line = Output 'ss cs
Print "Hallo SPI TEST(CAN) RX Stauts 250kbits für atmega8 register auslesetest"

Spiinit
Set Cs_line
Waitms 20

gosub Mcp2515_init

do
' ###### Mainloop ######
loop


Mcp2515_init:

Dim Mcp2515_reset As Byte
Mcp2515_reset = &HC0

Print "init"

Cs_line=0
Spiout Mcp2515_reset , 1
Cs_line=1

print "init fertig"

....usw aber soweit kommt das programm ja leider nicht

return
end