Forum: Mikrocontroller und Digitale Elektronik Bascom: Difference at 00026


von Jonas (Gast)


Lesenswert?

Hallo,

Ich habe das Problem das ich jedesmal wenn ich versuche in Bascom ein 
Programm auf einen Attiny12 zu übertragen beim Überprüfen die 
Fehlermeldung:"Difference at 00026" erhalte.

Ich verwende diesen Programmer: 
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=161
Er funktioniert schon seit mehreren Jahren Problemlos.

Ich würde mich sehr über eure Hilfe freuen.

Gruß Jonas

von Paul Baumann (Gast)


Lesenswert?

Der Attiny12 hat keinen SRAM. Das macht das Programmieren in Bascom
einigermaßen schwierig.

Du könntest in der Not versuchen, Variablen mit IRAM zu definieren.
IRAM benutzt die Register als "künstlichen" RAM.

Beispiel:

Dim Horst as IRAM BYTE

Besser ist es, sich einen Kontroller mit SRAM auszusuchen.

MfG Paul

von Spess53 (Gast)


Lesenswert?

Hi

Löscht du den AVR vor dem Programmieren?

MfG Spess

von Jonas (Gast)


Lesenswert?

Hallo Paul Baumann,

schonmal danke für die Antwort.
Davon habe ich schon gelesen und mich auch sonst an diese Anleitung 
gehalten: 
http://www.mitchsoft.de/Tips/BascomIDE/ATtiny_ohne_SRAM/Start.html

Das Problem besteht aber darin das ich das Programm garnicht erst auf 
den Controller bekomme und auch garkeine Variablen definiert habe.

Hier mein Bascom-Programm:
1
$regfile = "attiny12.dat"
2
$crystal = 1000000
3
$tiny
4
$swstack = 0
5
$hwstack = 0
6
7
Config Portb.1 = Output
8
9
Do
10
Portb.1 = 1
11
Waitms 100
12
Portb.1 = 0
13
Waitms 100
14
loop
15
end

Die Attinys 12 habe ich leider gekauft als ich von dem Problem noch 
nicht wusste und ich bin der Meinung das man sich solchen Problemen dann 
einfach stellen muss.

Gruß Jonas

von Jonas (Gast)


Lesenswert?

Hallo Spess,

normalerweise nicht. Ich habe es aber jetzt mal manuell gemacht und das 
Programm lies sich glatt Problemlos übertragen.

Es sieht aber so aus als wenn das Programm nicht ausgeführt wird.
In 5 Minuten kann ich dir sag was das Ozi anzeigt.

Gruß Jonas

von snowfly (Gast)


Lesenswert?

Hab mich auch schonmal mit Bascom und tiny12 versucht.
Mei Tipp --> lass es.

Wait funktioniert IMHO nicht

von Jonas (Gast)


Lesenswert?

Hallo Spess,

das Programm wird nicht ausgeführt.
Weiss vielleicht jemand wieso?

Gruß Jonas

von Paul Baumann (Gast)


Lesenswert?

Nimm mal die beiden Wait-Befehle raus und hänge Dich mit dem 
Oszillographen an den PB1. Dann siehst Du, ob es daran liegt.


Wait scheint hier mit dem Tiny12 nicht zu funktionieren.
In der Simulation bleibt er da hängen.

In der Hilfe steht:
When you like to program in ASM you can use BASCOM with the $TINY 
directive.
Some BASCOM statements will also already work but the biggest part will 
not work.

(Manche Befehle werden funktionieren, die meisten nicht)

MfG Paul

von snowfly (Gast)


Lesenswert?

mit dem Timer sollte die warterei auch machbar sein

von Jonas (Gast)


Lesenswert?

Hallo Paul Baumann,

das mit der Simulation ist mir auch schon aufgefallen, dachte aber die 
Simulation geht auch nicht.

Zur Hilfe: In welcher Hilfe hast du nachgeschaut und unter welchem 
Stichwort?
Was bedeutet der Befehl ASM?

Der Attiny macht übrigens trotz des herausgenommenen Wartebefehls 
nichts.

Gruß Jonas

von Paul Baumann (Gast)


Lesenswert?

>Zur Hilfe: In welcher Hilfe hast du nachgeschaut und unter welchem
>Stichwort?

Du stellst Dich mit dem Kursor auf ein Schlüsselwort (Hier "$TINY")
und drückst die Taste F1

Dann bekommst Du die Hilfe zum jeweiligen Befehl angezeigt.

>Was bedeutet der Befehl ASM?

$ASM bedeutet, daß nun ein Stück Assembler-Programm anfängt. Du kannst
in der Bascom-Oberfläche auch ganz normal in Assembler programmieren.
Wenn Du damit fertig bist, folgt dann $End ASM.

>Der Attiny macht übrigens trotz des herausgenommenen Wartebefehls
>nichts.

Des Befehls? Beide Wartebefehle sollst Du mal herausnehmen.

Der Tiny12 hat doch einen Timer0. Damit kannst Du Dir doch selber
Wartezyklen basteln.

MfG Paul

von Jonas (Gast)


Lesenswert?

Hallo Paul,

schonmal danke für deine Hilfe.

Ich habe beide Wartebefehle rausgenommen.
Ich habe sogar den Befehl abschalten herausgenommen sodass der Ausgang 
ständig High sein sollte. Ist er aber nicht.

Das mit dem Timer0 währe dann die nächste stufe.

Gruß Jonas

von Paul Baumann (Gast)


Lesenswert?

>Das mit dem Timer0 währe dann die nächste stufe.

Ja, besser ist das. Wenn man einen Timer zur Verfügung hat, kann man 
sich
damit dann in dessen Interrupt noch zur Not eine Variable hochzählen
lassen, damit man auf entsprechend lange Zeiten kommt.

Ich selbst gehe jetzt in den Sleep-Modus...
;-)
MfG Paul

von snowfly (Gast)


Lesenswert?

Hmm, habs gerad mal ausprobiert:
1
' Initialisierung MCU = ATTiny12 ohne SRAM
2
3
$regfile = "attiny12.dat"                                   ' Controller = ATtiny12
4
$crystal = 1000000                                          ' Takt 1MHz
5
$noramclear                                                 ' RAM nicht initialisieren
6
$tiny                                                       ' Stack nicht initialisieren
7
'$hwstack = 32                                              ' Stackinitialisierung wird durch $TINY unterdrückt
8
$swstack = 0                                                ' Software 0
9
$framesize = 0                                              ' Framesize = 0
10
11
Config Timer0 = Timer , Prescale = 8
12
Start Timer0
13
14
On Timer0 Tog Nosave
15
Enable Timer0
16
17
Config Pinb.1 = Output
18
Led Alias Portb.1
19
20
21
22
23
Do
24
nop
25
Loop
26
27
28
Tog:
29
Toggle Led
30
Return

im Sim funktioniert es nicht, irgendwie springt er nicht in die ISR...
Vielleicht gehts ja im Chip.

von Jonas (Gast)


Lesenswert?

Hallo snowfly

Das Programm funktioniert so wie du es mir gegeben hast nicht.
Ich habe es ein bisschen verändert und jetzt geht es:
1
Config Pinb.1 = Output
2
Led Alias Portb.1
3
4
5
Led = 1
6
7
Do
8
Toggle Led
9
Loop
10
11
12
Tog:
13
Toggle Led
14
Return

Komicherweise funktioniert das Programm auf Port PB3 nicht.

Ich habe auch nocheine Frage:

Und zwar was bedeutet der Befehl nop und was hat es auch mit Tog 
aufsich?

Gruß Jonas

von Jonas (Gast)


Lesenswert?

Ich nehme was zurück: Ed funktioniert auch an Port 3.

Gruß Jonas

von snowfly (Gast)


Lesenswert?

NOP heisst N(o)OP(eration), also "mache nichts" es verbrät einfach einen 
taktzyklus mit nichtstun.
1
Config Timer0 = Timer , Prescale = 8
2
Start Timer0
3
4
On Timer0 Tog Nosave
5
Enable Timer0

hier wird der Timer initialisiert, gestartet
und die Abweisung gegeben "wenn der Timer überläuft springe zur 
Sprungmarke Tog".

Er sollte also den Timer0 durchzählen und bei überlauf den Pin toggeln.
Sowie du das jetzt gemacht hast toggelt der tiny den Pin mit maximaler 
geschwindigkeit ohne verzögerung.

von Jonas (Gast)


Lesenswert?

Hallo snowfly,

danke das du mir soweit geholfen hast,
danke an die anderen.

Ich denke das ich jetzt mein Projekt durchziehen kann.
Bei Bedarf werde ich mich melden.
Gruß Jonas

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
Noch kein Account? Hier anmelden.