Hoi,

Ik ben bezig met het stoeien met een 2313 via BASCOM en TwinAVR. Ik heb m aangesloten via een RS232 CPE, naar de serieele poort.

Ik probeer de poorten B en D (IN/UIT) in te stellen, maar wat ik ook doe,. hij loopt telkens vast. Ter controle laat ik nadat iets ingesteld is, een bericht versturen (print).

In de simulator werkt alles prima, maar ga ik het daadwerkelijk testen, dan loopt het vast. Dat vastlopen gebeurd wanneer hij DDRx = Z of DDRx.Y = Z uitvoert. Of ik nu Poort B ineens instel, of per pin instel, na de laatste staop loopt ie vast. Ik begrijp er echt niets meer van. Zie ik iets belangrijks over het hoofd ?

Om het duidelijker te maken een stukje brondcode van het begin :
===[start broncode]===

$regfile = "2313def.dat"
$crystal = 3686400
$baud = 2400

Dim I as Byte, Opdracht as string * 25

Print "OK, I'm alive !"
For I = 0 to 7
'Opm: Bij 7 stopt ie. "I=0 to 6" => stoppen bij 6
Print "DDRB." ; I ; " instellen."
DDRB.I = 1
Next
Print "DDRD instellen"
DDRD = 6

Input "" , Opdracht
print Opdracht

'Nog een hele bups aan programmering
End

===[einde broncode]===

Heb ik iets niet goed gedaan, is de 2313 een beetje bokkig, is er een of andere bug, of zie ik iets anders over het hoofd ?

Groetjes en wachtend op een antwoord,

Bernard

niet genoeg aan 1 topic ?

Op 10 maart 2005 15:42:19 schreef Mr. Digital:
niet genoeg aan topic ?

Ja, sorry. Ik wou titel even aanpassen, want een verwijzing naar Atmel leek me wel zo handig. Inmiddels al een mailtje verstuurd naar een moderator om andere te verwijderen...

Maar goed,. heb jij een tip voor me, betreffende mijn vraag / probleem ?

andere bericht is removed en deze is herschikt in Digitaal

Kun je aangeven waar in de code de microcontroller 'vastloopt'?

Is dat misschien na dit stukje?

Print "DDRD instellen"
DDRD = 6

Op zich moet dit mogen, volgens de datasheet. Ik heb zelf geen ervaring met de programma's die jij gebruikt, maar zou het kunnen dat die zo bijdehand zijn om de UART uit te schakelen omdat jij toevallig aan DDRD komt?

Op 14 maart 2005 10:28:57 schreef ka_bonthond:
Kun je aangeven waar in de code de microcontroller 'vastloopt'?

Is dat misschien na dit stukje?

Print "DDRD instellen"
DDRD = 6

Nee,. hij loopt al vast voor dat stukje : na die eerste loop. En juist telkens bij de laatste stap (Zie "opm." in de broncode) Het is ten 1e op poort B, ten 2e lijkt het na de laatste stap in de telloop te gebeuren, dus komt nog niet eens bij "DDRD instellen". Dat is juist zo vreemd.

En ja,. eerlijk gezegd verwacht ik ook nog wel obstakels, wanneer ik poort D instel om er later juist een "print" doorheen te jagen.
Ik wil enkele pinnen / bits op D instellen als inputs, maar de communicatie openhouden. (daarnaast 2 pinnen gebruiken om te detecteren dat uC en/of PC bezet is)
Nu kan ik ook per pin op poort D alles gaan instellen, maar ik dacht dat het sneller kon met DDRD = 6.

Groetjes,

Bernard

Als je nou die loop eens in tact laat en alleen niets meer naar DDRB schrijft... Weet je in elk gavel of het 'ergens' in die loop mis gaat, of dat het din gal die sets niet leuk vindt.
Ben voor de rest niet thuis in dit soort basic, maar op het 1ste gezicht ziet het er wel normaal uit...
DDRB heeft ook niets speciaals, dus...

Die DIM zorgt er niet toevallig voor dat I op $17 terecht komt? Dan sta je je eigen variable to overschrijven... (kan me niet snel voorstellen dat-ie dan in een loop blijft hangen, maar weet niet hoe basic de for-next in assembly doet)

Kijk eens of je een assembly listing kunt krijgen. Zegt vaak iets meer over wat er werkelijk gebeurt.