Forum: Mikrocontroller und Digitale Elektronik LED-Blitzer mit Bascom und ATtiny13


von Leopold S. (leopold)


Lesenswert?

Ich habe folgendes programm erstellt und komme nicht weiter;
kann mir da jemand helfen?
1
'Bascom Projekt
2
  'von Leopold Schilling
3
  '*************************************
4
  'Alarmatrappe mit Led-Flasher
5
  ' mittels Attiny13
6
  '  weisse LED mit 100Ohm Vorwiderstand
7
  '   Widerstand 47k an Pin1
8
  '*************************************
9
  $regfile = "ATtiny13.dat"
10
  $crystal = 1000000
11
12
  Config Portb.1 = Output                                   'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
13
 Led Alias Portb.1
14
15
16
  Do
17
            Led = 1                                         'Pin wird auf Low, also 0V geschaltet
18
     Waitms 150
19
            Led = 0
20
            Waitms 5000                                         'Pin wird auf High,also 5V geschaltet
21
     
22
23
  Loop
24
  End
An Pin 6 hab ich eine weisse Led mit Vorwiderstand  und einen Widerstand
von Plus auf Pin 1!
lg
LS

von Gast (Gast)


Lesenswert?

was ist jetzt deine frage?

von Vlad T. (vlad_tepesch)


Lesenswert?

der tiny 14 kann doch gar kein 1Mhz, zumindest nicht ohne externen 
Quarz.

intern hat der 9,6(default) oder 4,8 dies kannst du wahlweise noch 
teilen lassen (default: 8)
der standardtakt ist also 1,2Mhz.
wird aber nicht dein Problem sen.


1
>   Config Portb.1 = Output                                   'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
2
>            Led = 1                                         'Pin wird auf Low, also 0V geschaltet
3
>            Waitms 5000                                         'Pin wird auf High,also 5V geschaltet
selbst gar keine Kommentare sind besser als falsche kommentare

von Leopold S. (leopold)


Lesenswert?

Das mit den Kommentaren tut mir leid.
Ich wollte ein einfaches Bascom Programm mit dem ich mit einem Attiny13 
od. 15 auf Pin6 (Portb.1) eine Led alle Minuten für 1 Sekunde zum 
Leuchten bringe.
Stromversorgung ist 4,2V
Kondensator zwischen Plus u. Minus
Vorwiderstand 100 Ohm mit weisser LED-minus auf Pin6, Plus der Led auf 
Versorgungsplus
47k Widerstand von Plus zu Pin 1(Reset)
lg
LS

von Klaus D. (kolisson)


Lesenswert?

hallo Leopold Schilling,

ich hatte mit bascom und tiny13 auch schonmal probleme
mit einem portpin als ausgang. irgendwie schein bascom da die
spi-schnittstelle nicht richtig zu verwalten.

versuch das ganze mal mit nem anderen pin. z.b. pb4.
das programm sieht doch sonst gut aus.

gruss klaus

von Vlad T. (vlad_tepesch)


Lesenswert?

Was ist denn das Problem?
gehts gar nicht, gehts falsch? das Prgrammieren geht?

>Vorwiderstand 100 Ohm mit weisser LED-minus auf Pin6, Plus der Led auf 
Versorgungsplus

Das heißt deine LED ist low-Aktiv. sprich sie leuchtet, wenn dein Port 
auf Low ( LED = 0) ist und wenn High (LED=1) geht die LED aus.

Der vorwiderstand ist für ne weiße LED, die typischerweise eine 
Durchlasspannung von ~3V haben recht hoch, sollte aber passen.

Der Pullup am reset ist auch ok.


edit:
>     Waitms 150
>     Waitms 5000                                         'Pin
>Ich wollte [...] eine Led alle Minuten für 1 Sekunde zum Leuchten bringe.

??? du kennst die umrechnungfaktoren von ms -> s -> min?

von Leopold S. (leopold)


Lesenswert?

Der Attiny macht nichts.
Wie rechnet man die Waitms in sek um?
Der interne Takt ist ja 1MHZ???
lg

von Gast (Gast)


Lesenswert?

millisekunde, kilogramm, dezimeter.

von Daniel W. (pegasus)


Lesenswert?

Waitms 5000
ist dasselbe wie ...
Wait 5

von Daniel W. (pegasus)


Lesenswert?

Auf mcselec.com gibt es einen Bericht der bestätigt, dass die 
attiny13.dat Datei fehlerhaft ist :

http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=1409&highlight=attiny13

von Karl H. (kbuchegg)


Lesenswert?

Daniel W. schrieb:
> Auf mcselec.com gibt es einen Bericht der bestätigt, dass die
> attiny13.dat Datei fehlerhaft ist :
>
> 
http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=1409&highlight=attiny13

Ähm. Von 2006 stammt die Meldung, dass dieses mitlerweile gefixt ist.

Schnellschuss:
Du hast aber schon ausprobiert, ob die LED nicht verpolt eingebaut 
wurde. Sowas kann schon mal passieren.

von Leopold S. (leopold)


Lesenswert?

Hallo!
Hab jetzt alles weggeschmissen und fange HW u. SW neu an zu bauen!
lg
LS

von Vlad T. (vlad_tepesch)


Lesenswert?

Karl heinz Buchegger schrieb:
> Schnellschuss:
> Du hast aber schon ausprobiert, ob die LED nicht verpolt eingebaut
> wurde. Sowas kann schon mal passieren.
lol.
Das wärs aber.

Leider hat sich der TO ja trotz aufforderung nicht überreden lassen das 
Fehlerbild geanuer zu beschreiben.

von Leopold S. (leopold)


Lesenswert?

Hallo!
Ich verwende:
zum Brennen das Mysmartusb MK2,mit MyAvrWorkpad Plus
Bascom zum programmieren
ATtiny13 u. 15
mit Reset-Widerstand
100nF auf Versorgungsspannung
weisse LED mit 100 Ohm Vorwiderstand
auf einer Lochrasterplatine aufgebaut mit IC-Sockel
Spannungsversorgung ist ein LiIon Akku mit 4,1Volt
Die LED funktioniert einwandfrei wenn ich Spannung darauf anlege.
Wenn ich an die Schaltung eine Spannung anlege passiert nichts.
Fusebits hab ich bei Bodlev und Suto u. CKSEL0 gesetzt.
lg
LS

von Leopold S. (leopold)


Lesenswert?

'Bascom Projekt
  'von Leopold Schilling
  '*************************************
  'Alarmatrappe mit Led-Flasher
  ' mittels Attiny13
  '  weisse LED mit 100Ohm Vorwiderstand
  '   Widerstand 47k an Pin1
  '*************************************
  $regfile = "ATtiny13.dat"
  $crystal = 1000000

  Config Portb.4 = Output      'Ein Pin wird aus Ausgang konfiguriert
 Led Alias Portb.1


  Do
            Led = 1      'Pin wird auf Low, also 0V geschaltet-LED 
leuchtet
     Waitms 100       'für 0,1 Sekunden
            Led = 0     'LED aus
            Waitms 5000    'für 50 Sekunden


  Loop
  End
---------------------------------------------------------------
Das ist der Programmstand; nicht ganz klar ist für mich die 
Cristalanweisung da ich den internen Quarz verwenden will und
unsicher bin ich mir mit den Waitmsanweisungen.
lg
LS

von Paul Baumann (Gast)


Lesenswert?

Du definierst PB4 als Ausgang, haengst aber mit der LED an PB1.
Waitms 5000 wartet 5000ms d.h. 5 Sekunden. Wait 50 wartet 50 Sekunden.

"Crystal" bedeutet allgemein: die Taktfrequenz.


MfG Paul

von Leopold S. (leopold)


Lesenswert?

Hallo!
Danke für den Hinweis
Ich hab es vorher mit portb.1 propiert und dann auf portb.4 umgestellt 
und
auf diese Änderung vergessen.
Warum muß ich eine $cristalanweisung schreiben wenn ich den internen 
Takt
verwenden will???
lg
LS

von Das Nichts (Gast)


Lesenswert?

Damit Waitms die richtige Zeit berechnen kann.

von Das Nichts (Gast)


Lesenswert?

Die Hilfe in Bascom zu lesen währe auch nicht schlecht.
Nur mal so als Hinweis.

Gruß

von Das Nichts (Gast)


Lesenswert?

Man kann dir hier im Forum schon helfen,
aber die eigentliche Arbeit mußt du schon selbst machen.

von Daniel W. (pegasus)


Lesenswert?

>>der tiny 14 kann doch gar kein 1 Mhz, zumindest
>>nicht ohne externen Quarz. Intern hat der 9,6 ...


Hallo,

wenn der ATtiny intern 9,6 MHz hat, kommt man bei einem Teiler von acht 
auf 1,2 MHz.

Wenn ich $crystal= 1000000 setze, versagt der ATtiny dann seinen 
Betrieb, oder schwingt er neben der Frequenz?

von Karl H. (kbuchegg)


Lesenswert?

Daniel W. schrieb:
>>>der tiny 14 kann doch gar kein 1 Mhz, zumindest
>>>nicht ohne externen Quarz. Intern hat der 9,6 ...
>
>
> Hallo,
>
> wenn der ATtiny intern 9,6 MHz hat, kommt man bei einem Teiler von acht
> auf 1,2 MHz.
>
> Wenn ich $crystal= 1000000 setze, versagt der ATtiny dann seinen
> Betrieb, oder schwingt er neben der Frequenz?

Schau bitte in die BASCOM Hilfe.
Da ist jeder Befehl ziemlich gut beschrieben.

$CRYSTAL teilt BASCOM mit, mit welcher Frequenz dein AVR arbeitet. Aber: 
ES VERÄNDERT NICHT WIE SCHNELL DER AVR TATSÄCHLICH ARBEITET.

Das ist reine Information für den BASCOM Compiler, damit der die 
Warteschleifen richtig berechnen kann.

von Klaus D. (kolisson)


Lesenswert?

mensch Autor:  Leopold Schilling (leopold) ,

was ist denn mit dir los, dass du so oberflächlich bist.

wenn du ein problem hast, musst du es lokalisieren
und dann ändern. ... also erst analysieren und dann friemeln.

du hast ja meinen vorschlag befolgt mal den pb4 zu verwenden.
leider hast du dann wieder vergessen, das programm anzupassen.

wenn du unsicher mit alias bist, dann lass ihn doch weg.

...   das heisst dann du vereinfachst dein problem:

also...
config portb.4 = output

und dann später portb.4 = 1
oder port.4 = 0

das mit den waits sollte doch für sich genommen auch einleuchten:
1uS = 10hoch minus 6 sekunden
ist so ähnlich wie mikrogramm
brauchst du halt 1000 mikrogramm  um ein gramm zu haben.

danach kommt dann das gramm (milli-kilogramm) oder die millisekunde
.. sind halt 10hoch minus 3 sekunden ... also brauchte 1000 davon
(also von den ms) dann haste 1 sekunde

dann kannste schreiben wait 1 für die sekunde.


und nun nochmal zum crystal:
der bascomgeist rechnet durch die angabe von crystal aus, was er machen 
soll, wenn du wait 1 eingibst.
du willst also einen wait 1 (sekunde) ... und der denkt sich aus, 
wieviele systemtakte (abhängig vom takt) er nun warten muss , um 
ungefähr deinen wünschen nachjzukommen.

.. und deshalb ist die angabe nicht unwichtig,
obwohl zwischen 1000000 und 1200000 nfür deine anwendung erstmal nicht 
viel
passiert ... ausser dass deine sekunde um 20% kürzer oder länger wird.


ich könnte ja mal vorschlagen, dass du mal sowas in das prog schreibst:

do
wait 2
portb.4=1
wait 2
portb.4=0
loop

wenn dein crystal falsch ist, kann es ja durchaus einige minuten dauern, 
bis sich was tut.. aber es sollte sich schon was tun.

die wartezeit ist aber doch besser investiert als in die ganzen texte 
hier.

............ also .............. streng dich an

gruss

von Daniel W. (pegasus)


Lesenswert?

>>$CRYSTAL teilt BASCOM mit, mit welcher Frequenz dein AVR arbeitet. Aber:
>>ES VERÄNDERT NICHT WIE SCHNELL DER AVR TATSÄCHLICH ARBEITET.

Aha! -Wenn man ...
$crystal = 1000000 statt $crystal = 1200000

... eingibt, würde der AVR also nicht den Dienst 100% quittieren, 
sondern
der AVR würde funktionieren, und die Sekunde, die man mit Wait 1 angibt, 
wäre bloss um 20% kürzer oder um 20% länger.

von Leopold S. (leopold)


Lesenswert?

Hallo!
Ihr habt natürlich recht.
Ich hab in der Vergangenheit sowas mit einem NE555 gemacht.
Jetzt hab ich mir ein mysmartusb zugelegt, ein Buch gekauft, das
ich leider noch nicht studieren konnte und wollte schnell einen
Attiny zum Blitzen bringen(den Attiny deswegen weil der weniger Strom 
verbraucht).
In Zukunft werd ich mir ein ordentliches Bascom-Tool zulegen
(dzt. hab ich eine Demoversion wo z.B. die Hilfe fehlt).
Ich hoffe das ich heute das Projekt positiv beenden kann.
lg und Danke für die Hilfen
LS

von Karl H. (kbuchegg)


Lesenswert?

Leopold Schilling schrieb:

> In Zukunft werd ich mir ein ordentliches Bascom-Tool zulegen
> (dzt. hab ich eine Demoversion wo z.B. die Hilfe fehlt).

Die Hilfe gibts auch online.
Auf genau derselben Web-Site von der du auch die Demo hast.
Und ja. Man kann sich die Hilfe von dort auch downloaden.

von Klaus D. (kolisson)


Lesenswert?

....   huh und vor allem ist natürlich die preiswerte vollversion von 
bascom auch nicht schlecht.

was ich nicht verschweigen will, ist natürlich, dass die vollversion // 
diese hab ich jetzt seit etwa 2 jahren // auch nicht mehr wirklich 
mitwächst.

die kostenlosen updates sind prima .. aber bei neueren prozessoren als 
vor zwei jahren ..  wird es doch immer wieder sehr merkwürdig, was da 
passiert.

als neuere prozessoren fällt mir z.b. schon der mega88 im vergleich zum 
mega8 ein.
da gibs manchmal sachen, wobei ich an mir zweifele.
im ende lese ich dann den teil des datenblattes , der relevant ist und 
programmier die nötigen register in inline assembler.

trotzden... schön dass es bascom gibt
und schön, dass amn sich dann nach der eingeöhnungszeit einfach nicht 
mehr wundert .. sondern das problem analysiert und es // man ist ja auch 
selber gewachsen // einfach anders lösen kann.

ohne bascom hätte ich wohl garnicht damit angefangen

gruss klaus

von Daniel W. (pegasus)


Lesenswert?

>>(dzt. hab ich eine Demoversion wo z.B. die Hilfe fehlt).

habe ebenfalls eine Demoversion (Version 1.11.9.1).
-Die Bascom-AVR Hilfe ist dabei!

von Vlad T. (vlad_tepesch)


Lesenswert?

ich kann nur nicht nachvollziehen warum man sich von einer 
Minderheitensprache wie bascom abhängig macht.

zum einen hast du das Problem, mit neuer Hardware.
Zum anderen hast du ein totales Problem mit anderer Hardware.
(Dazu kommt der Preis)

Wenn du irgendwann mal nen anderen µC verwenden muss, musst du die 
ganzen Bascom-Programme umschreiben.

Wenn man es direkt in C schreibt, muss man nur die Hardwareabstraktion 
anpassen.

von Klaus D. (kolisson)


Lesenswert?

hallo vlad,

lass das doch lieber !
dadurch kommt doch das ganze thema durcheinander.
deine erfahrung sollte dir gezeigt haben, dass jetzt alle auf den zug 
aufspringen.
ja ja .. ich meine diese merkwürdigen c-ler.


gruss klaus

von Vlad T. (vlad_tepesch)


Lesenswert?

ich wollt ihm nur einen Rat geben, der ihm eventuell etwas Geld spart 
und zum anderen möglicherweise Arbeit.

außerdem ist es nie verkehrt, wenn man ein wenig c kann.
Bascom ist von recht eingeschränktem Nutzen.
(weiß ja nicht, was er beruflich macht, bzw. vor hat berufllich zu 
machen)

Aber ich gebe dir recht! das ist OT. und sollte woanders diskutiert 
werden.

Gruß,
Vlad

von MWS (Gast)


Lesenswert?

>> Bascom ist von recht eingeschränktem Nutzen.

Eine reichlich unqualifizierte Aussage.

Denke ich kann C ein wenig und dennoch schätze ich die unkomplizierte 
Programmierung mit Bascom. Versteh' wirklich nicht woher die abschätzige 
Meinung kommt.

Das wirklich Wesentliche ist nicht das Werkzeug, sondern der mehr oder 
weniger intelligente Kopf dahinter. Wenn ich mir manche Posts hier im 
Forum anschaue, auch die unter C geschriebenen, kommen mir Zweifel, ob 
diese zu Ersteren zählen sind.

Und ansonsten scheint mir Bascom Neuanfängern den Einstieg in diese 
Materie sehr zu erleichtern. Daß da manches Merkwürdige rauskommt ist 
auch klar und natürlich.

Wie steht's übrigens mit dem Programm des OP's ?

von holger (Gast)


Lesenswert?

>Fusebits hab ich bei Bodlev und Suto u. CKSEL0 gesetzt.

Da würde mich mal interessieren wie, was gesetzt wurde.
Bodlevel auf 4.3V bei 4.1V Betriebsspannung bedeutet
Dauerreset. Am besten mal Bodlevel auf 2.7V setzen
oder auch mal ganz deaktivieren.

von Vlad T. (vlad_tepesch)


Lesenswert?

MWS schrieb:
>>> Bascom ist von recht eingeschränktem Nutzen.
>
> Eine reichlich unqualifizierte Aussage.
Danke.

>
> Denke ich kann C ein wenig und dennoch schätze ich die unkomplizierte
> Programmierung mit Bascom. Versteh' wirklich nicht woher die abschätzige
> Meinung kommt.
Ich meinte außerhalb des AVR-Hobbybastelerbereichs wirds dir nicht viel 
bringen. C ist universell. für nahezu jede Hardware/Os gibts c compiler.
Einnicht zu unterschätzendenr Faktor ist auch: Wenn du 
Programmierkenntnisse in C im Lebenslauf vorweisen kannst wiegt das mit 
sicherheit mehr als Bascom Erfahrungen.

>
> Das wirklich Wesentliche ist nicht das Werkzeug, sondern der mehr oder
> weniger intelligente Kopf dahinter.
Das Werkzeug spielt eine ganz entscheidene Rolle!
Es ist etwas anderes, ob du ein Produkt in C entwickeslt, was mit 
geringem Anpassungsaufwand auf den verschiedensten Harswareplatformen 
lauffähig ist, oder ob du für jede Hardwareplatform in einer speziellen 
Programmiersprache/Toolchain alles neu schreiben muss.
> Wenn ich mir manche Posts hier im
> Forum anschaue, auch die unter C geschriebenen, kommen mir Zweifel, ob
> diese zu Ersteren zählen sind.
wer sind erstere? und wer sind letztere?

>
> Und ansonsten scheint mir Bascom Neuanfängern den Einstieg in diese
> Materie sehr zu erleichtern. Daß da manches Merkwürdige rauskommt ist
> auch klar und natürlich.
Was auf jeden Fall sehr gut ist, dass die Geräteinitialisierungen recht 
unkomplizirt gekapselt werden. Bei C ist da die ewige 
Register-Bit-Schuppserrei. Aber da könnte man sich auch nette 
Abstraktions-Header basteln.

>>als neuere prozessoren fällt mir z.b. schon der mega88 im vergleich zum
>>mega8 ein. da gibs manchmal sachen, wobei ich an mir zweifele.
woher soll ein anfänger dawissen, ob er was falsch gemacht hat, oder der 
Compiler
das pasiert bei c nicht, das ist (nahezu) immer der Programmierer 
schuld, da die compiler sehr ausgereift sind. und die AVR header sind 
auch sehr gut.


>
> Wie steht's übrigens mit dem Programm des OP's ?
Richtig: Zurück zu Thema

von Leopold S. (leopold)


Lesenswert?

Hallo!
Ich hab jetzt alles neu aufgenaut mit Attiny2313.
Hab auf Portd.5 den Vorwiderstand zur LED welche permanent 4,1V Plus 
hat.
------------------------------------------------------
 'Bascom Projekt
  'von Leopold Schilling
  '*************************************
  'Alarmatrappe mit Led-Flasher
  ' mittels Attiny2313
  '  weisse LED mit 67 Ohm Vorwiderstand
  '   Widerstand 10k an Pin1
  '*************************************


  $regfile = "ATtiny2313.dat"
  $crystal = 3686400
  $sim
  Config Pind.5 = Output

  Do
    Portd.5 = 1
   Waitms 200
    Portd.5 = 0
   Waitms 2000
Loop
End
-------------------------------------------------------------
Hab die Fusebits auf Standard und alles bleibt finster.
Ich weis keinen Rat mehr warum???
lg
LS

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Hi,
könnte es sein, das Du mit $sim das Waitms ausser kraft setzt?

Wigbert

von Leopold S. (leopold)


Lesenswert?

Das $sim hab ich nur zum Testen gesetzt und wieder auskommentiert.
Die LED hab ich Minus auf Minus permanent und Plus der LED mit
Vorwiderstand auf das Portd.5 (oben hab ich das verwechselt 
geschrieben).
lg
LS
Wenn ich simuliere geht der Zeiger zum 1. wait und bleibt dort stehen.
Meine CPU vom PC geht auf 100% Auslastung?

von Vlad T. (vlad_tepesch)


Lesenswert?

Ich kenn bascom nicht, aber das kommt mir komisch for:
  Config Pind.5 = Output
sicher dass es Pind.5 und nicht Portd.5 oder Ddrd.5 heißen muss?

AVR hat für IO-Ports jeweils 3 register:
DDR[A|B|C|D] - hier stellt man ein , ob ausgang oder eingang (standard: 
eingang)
PIN[A|B|C|D] - hier ließt man werte von auf eingang konfigurierten Pins 
aus
auf Output konfigurierte Pins können meist getoggelt werden, indem man 
hier ne 1 an das entsprechende Bit reinschreibt.
PORT[A|B|C|D] - hier schreibt man rein, ob ein auf ausgang konfigurerter 
Pin an oder aus sein soll. wenn ein Pin auf eingang steht, schaltet man 
hier die Pullups ein, oder aus.

was heißt:
  $sim
?

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

OK,
Na dann zeig mal die Fusebits

Wigbert

von Leopold S. (leopold)


Lesenswert?

Hallo!
$sim heisst das beim Simulieren die wartezeiten übersprungen werden.
lg
LS

von Vlad T. (vlad_tepesch)


Lesenswert?

schau mal hier:

http://www.dieelektronikerseite.de/uC%20Ecke/Lections/Ports%20-%20Wenn%20der%20AVR%20steuert.htm

da gibts ein Beispiel mit initialiserung:


$regfile "m8def.dat"
$crystal = 1000000

Config Portd = Output

Portd.0 = 1

Stop


Da steht PortD, nicht PinD.


Edit:

die Seite ist an sich auch recht interessant:
http://www.dieelektronikerseite.de

von Das Nichts (Gast)


Lesenswert?

Remarks

Simulation of a WAIT statement can take a long time especially when 
memory view windows are opened.

The $SIM compiler directive instructs the compiler to not generate code 
for WAITMS and WAIT. This will of course allows faster simulation.

When your application is ready you must remark the $SIM directive or 
otherwise the WAIT and WAITMS statements will not work as expected.

When you forget to remove the $SIM option and you try to program a chip 
you will receive a warning that $SIM was used.

von Leopold S. (leopold)


Lesenswert?

Die FuseBits
Low         High      Extended    Lockbits
01100010   11011111   11111111    11111111
lg
LS

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Ja, nee is klar, ein Destop-Bild mit den Fusebits
sollte es schon sein
nicht das ich Dir nicht glauben würde...
Hast Du aus PinD.5 PortD.5 gemacht ?

Wigbert

von MWS (Gast)


Lesenswert?

Wenn Du Fuses auf Standard hast, dann läuft der 2313 mit Voreinstellung 
1 MHz.

Da der Compiler den $crystal = 3686400 Wert für die Vorberechnung der 
Wait.. verwendet, ergäbe sich so eine Verzögerung von 0.74 Sek auf High 
und 7.4 Sek auf Low.

Deshalb wäre $crystal = 1000000 richtig.

Das Programm scheint bis auf $sim richtig zu sein, $sim erzeugt anderen 
Code wie schon richtig erwähnt, ist nur für den Bascom Simulator zu 
verwenden. Zum flashen muss ohne $sim kompiliert werden !

Die Verwendung des Config für einzelne Bits eine Ports ist mit:

Config Pind.5 = Output

auch richtig, das steht alles in der Hilfe Datei.

Aus Deiner Beschreibung geht nicht hervor, wie die Led angeschlossen 
ist, ein Pin der Led auf Minus, dann Widerstand, Widerstand an PinD.5 ?

Leuchtet die Led wenn der Widerstand statt am Pin direkt an Minus 
angeschlossen wird ?

Mit der $sim Anweisung drin sollte die Led halb so hell wie normal 
leuchten, aber scheinbar dauernd, da die entstehende Frequenz zu schnell 
für`s Auge ist.

von MWS (Gast)


Lesenswert?

Korrektur:

Leuchtet die Led wenn der Widerstand statt am Pin direkt an PLUS
angeschlossen wird ?

von Vlad T. (vlad_tepesch)


Lesenswert?

>Die Verwendung des Config für einzelne Bits eine Ports ist mit:
>Config Pind.5 = Output
>auch richtig, das steht alles in der Hilfe Datei.

Bist du sicher? Meiner meinung nach beschreibt er hier das falsche 
register.

Versuchs doch einfach mal mit
Config Portd.5 = Output

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

Hi,
laut Hilfe kann wohl Pin als auch Port mit Output definiert werden.
Da gibt es nur ja nur 2 Möglichkeiten.

Aber es ist ein "krummer" Quarz definiert, und wenn der Takt intern
erzeugt wird, deshalb mal die orginal Fuses, haben wir ein Konflikt

Wigbert

von MWS (Gast)


Lesenswert?

Ja, bin mir sicher, Beschreibung in der Bascom Hilfe:

"You can also set a single port pin with the CONFIG PIN = state,
statement."

und auch als Beispiel in der Hilfe:
1
$framesize = 32
2
Config Print0 = Portb. 0 , Mode = Set
3
Config Pinb. 0 = Output 'set the direction yourself
4
Dim Resp As String * 10

Aber im Zweifel:

DDRD = &H20

oder

DDRD = &B00100000

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

ach ja, eine Schaltung wäre echt hilfreich

Wigbert

von Leopold S. (leopold)


Angehängte Dateien:

Lesenswert?

Hab versucht etwas zu zeichnen
lg.LS

von Wigbert P. (wigbert) Benutzerseite


Lesenswert?

@Leopold Schilling (leopold)

hm, stellt sich die frage:

woher hast Du "$crystal = 3686400" , in der Schaltung kann ich
kein Quarz erkennen.

Wigbert

von MWS (Gast)


Lesenswert?

Schaltung ist ok.

Ist die Polung der Led richtig ? Leuchtet die Led wenn der Widerstand 
statt an Pin 9 an Plus gelegt wird ?

Wenn Du bei den Angaben für die Fuses keinen Fehler reingehaut hast:

> Low         High      Extended    Lockbits
> 01100010   11011111   11111111    11111111

dann läuft Dein 2313 mit internem R/C Oszillator 4MHz, da die DIV8 Fuse 
aktiv ist, hast Du eine tatsächliche Taktfrequenz von 500kHz, 3,68MHz 
wäre also ganz falsch.

http://www.engbedded.com/fusecalc/

Das ist somit nicht mehr der Auslieferungszustand, denn der wäre 1MHz.

Du musst dann:

$crystal = 500000

in den Quelltext schreiben.

Du kannst das Hex-File posten, dann schau' ich Dir auf Assemblerebene 
an, ob's wenigsten SW-seitig passt.

von Leopold S. (leopold)


Angehängte Dateien:

Lesenswert?

Hallo
Hab das Flasher.hex File angehängt!
Wenn ich plus zum Vorwiderstand halte leuchtet die LED!
Hab jetzt schon mit 1x Attiny13 2x Attiny15L und 3xAttiny2313 probiert!
lg
LS
meine Geduld ist schon ziemlich am Ende

von Leopold S. (leopold)


Lesenswert?

Mein neuester Code; geht auch nicht!

'Bascom Projekt
  'von Leopold Schilling
  '*************************************
  'Alarmatrappe mit Led-Flasher
  ' mittels Attiny2313
  '  weisse LED mit 67 Ohm Vorwiderstand
  '   Widerstand 10k an Pin1
  '*************************************


  $regfile = "ATtiny2313.dat"
  '$crystal = 1000000
  $crystal = 500000
  $hwstack = 32
  $swstack = 10
  $framesize = 40

  Config PortD = Output
  Dim Warten as Byte
  Dim Zuwarten as Byte

  Warten = 150
  Zuwarten = 250

Do
PortD = &B0010000
Waitms Warten
PortD = &B0000000
Waitms Zuwarten .

Loop
End

von holger (Gast)


Lesenswert?

PortD = &B0010000

Na, dann häng die LED doch mal an PORTD.4.

von Daniel W. (pegasus)


Lesenswert?

Hallo,
um das Bascom-Programm zu kompilieren muss man so vorgehen:

1) Kompilieren (F7)
2) Programm auf den Chip schreiben (F4)

Bist du sicher, dass dein Programm korrekt auf den Chip geschrieben 
wird?

von Leopold S. (leopold)


Lesenswert?

Hallo
Ich verwende Bascom-AVR Demo
Prüfe Syntax
Compiliere(F7)
Program chip(F4)
dann gehen 2 Fenster auf in denen der Balken läuft während des Brennens
das wars
lg
LS
Als Programmieradapter verwende ich mysmartusb MK2
Ich kann die Fusebits auslesen
Es wird der Progger und der Attiny erkannt

von Paul Baumann (Gast)


Lesenswert?

>Wenn ich plus zum Vorwiderstand halte leuchtet die LED!
Wenn Du das getan hast, als der Kontroller noch mit dem
Vorwiderstand der LED verbunden war, dann hast Du die
Betriebsspannung auf einen AUSGANGS-PIN gegeben.
Das vertraegt der Kollege Kontroller nicht.

Aendere mal die Zeile:
PortD = &B0010000
in
PortD = &B11111111
und schliesse die LED an einen anderen Ausgang an, um zu testen, ob
der Portd.4 von und gegangen ist.


MfG Paul

von holger (Gast)


Lesenswert?

Um dem Elend endlich mal auf die Spur zu kommen
versuch die LED doch einfach nur mal einzuschalten.
Am besten gleich alle Portd Pins schalten:

  $regfile = "ATtiny2313.dat"
  '$crystal = 1000000
  $crystal = 500000
  $hwstack = 32
  $swstack = 10
  $framesize = 40

  Config PortD = Output


Do

DDRD = &B11111111 'Vorsichtshalber. Später evtl. wieder entfernen
PortD = &B11111111

Loop
End

So, leuchtet das Ding jetzt endlich?

von MWS (Gast)


Angehängte Dateien:

Lesenswert?

Leopold,

Dein Hexfile ist unbrauchbar, Grund ist daß Du in Bascom Einstellungen 
geändert hast und zwar so wie sie nicht gehören.

Geh mal unter "Optionen -> Compiler -> Output" und nimm den Haken aus 
"Swap Words" raus.

Denn damit werden Lower Byte und Higher Byte eines Words im Hexfile 
vertauscht, damit kann der Atmel dann nix mehr anfangen.

Probier auch anhängendes Hexfile aus, ist auf 500kHz konfiguriert und 
sollte laufen.

von MWS (Gast)


Lesenswert?

Hier noch der korrigierte Quellcode basierend auf Deinen Einstellungen 
der Fuses:
1
 'Bascom Projekt
2
  'von Leopold Schilling
3
  '*************************************
4
  'Alarmatrappe mit Led-Flasher
5
  ' mittels Attiny2313
6
  '  weisse LED mit 67 Ohm Vorwiderstand
7
  '   Widerstand 10k an Pin1
8
  '*************************************
9
10
11
  $regfile = "ATtiny2313.dat"
12
  $crystal = 500000
13
14
  Config Pind.5 = Output
15
16
  Do
17
    Portd.5 = 1
18
   Waitms 200
19
    Portd.5 = 0
20
   Waitms 2000
21
Loop
22
End

Und aufpassen bei den Pin-Zuweisungen und den Anschlüssen des Atmel, 
Portpins beginnen immer bei 0 und enden bei 7, wobei PinX.0 der erste 
und PinX.7 der achte Anschluss ist. Ein Beinchen daneben und Du kannst 
lange warten, bis etwas passiert. :D

von Leopold S. (leopold)


Lesenswert?

Hallo!
Super das mit dem Swap Word war sichtlich die Ursache!
Wenn ich jetzt die waitms von 2000 auf 50000 umstelle schreibt er mir
Checksummenfehler!
Wie krieg ich das in Griff.
Ich möchte 1x aufblitzen und dann ca. 1 Minute bis zum nächsten Blitz 
warten!
lg
LS

von MWS (Gast)


Lesenswert?

Na, dann ist's ja gut.

Checksummenfehler ? Schau mal auf welche Zeile verwiesen wird, ob der 
Wert 50000 die Ursache ist. Bis 65535 sollte gehen.

Bei mir kompiliert das ohne Probleme.

Ansonsten nimm eine For/Next Schleife mit einem Waitms 1000 drin.

von Vlad T. (vlad_tepesch)


Lesenswert?

warum benutzt du statt waitms nicht wait? wie jemand weiter oben schon 
angemerkt hat?

von MWS (Gast)


Lesenswert?

> warum benutzt du statt waitms nicht wait?

He, he, stimmt, nicht aufgefallen, Bäume und Wald halt.

von Leopold S. (leopold)


Lesenswert?

Hallo!
Hab ein Erase gemacht und neu gebrannt;
geht jetzt mit waitms 52000; die Wartezeit sind ca. 70 Sekunden!
Das ist ok.
Freu mich das es funzt!
Schönen Abend und gute Nacht!
Mir ist ein Stein vom Herzen gefallen!
lg
LS

von MWS (Gast)


Lesenswert?

Danke. Wünsch' ich auch.

Wobei 52000mS eigentlich 52 Sek sein sollten...

von Vlad T. (vlad_tepesch)


Lesenswert?

>Wobei 52000mS eigentlich 52 Sek sein sollten...

jep, das heißt das die Compilerkonstante $crystal nicht mit der 
tatsächlichen Taktrate übereinstimmt.
sie ist rnd ein viertel niedriger als der tatsächliche Takt.

von Daniel W. (pegasus)


Angehängte Dateien:

Lesenswert?

Anschlüsse (siehe beigefügtes Bild):

orange: UB (+)
gelb: Miso
grün: Reset
blau: Sck
violett: Mosi
schwarz: Masse


Hallo,

habe heute eine Experimentier-Platine mit ATtiny13 gebaut (siehe Bild). 
-Der LED-Blitzer funktioniert ohne Probleme. -Hier der Bascom-Code:

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
1
  $regfile = "ATtiny13.dat"
2
  $crystal = 1200000
3
4
Piezo Alias Portb.4
5
Config Piezo = Output
6
7
Do
8
    Toggle Piezo
9
    Wait 1
10
    Toggle Piezo
11
    Wait 1
12
Loop
13
End

von Daniel W. (pegasus)


Angehängte Dateien:

Lesenswert?

ANHANG:

ATtiny13 -Pinout.

von Daniel W. (pegasus)


Angehängte Dateien:

Lesenswert?

ANHANG:

Parallelport SP12-Programmer (simple)

verwendete Bauteile:

1 Schottkydiode "BAT43" mit nur 0.3 Volt Spannungsabfall
  in Durchlassrichtung
2 Widerstände 220 Ohm
1 Elko 22uF

von Vlad T. (vlad_tepesch)


Lesenswert?

sehr haltbar sieht das aber nicht aus.
geht aber auch noch einfacher mit nur 3 widerständen:

http://www.dieelektronikerseite.de/uC%20Ecke/Lections/SPI-Kabel%20-%202%20Welten%20treffen%20aufeinander.htm


Damit hab ich den Mega für meinen selbstgebastelten usb-ISP-Programmer 
programmiert.

von Leopold S. (leopold)


Lesenswert?

Hallo!
Ich hätte noch eine kleine Zusatzfrage.
Wieviel Stromverbrauch habe ich mit dem Attiny2313 und der weissen LED;
bzw. wielange wird ein LiIonenakku mit 800mA reichen?
lg
LS

von Vlad T. (vlad_tepesch)


Lesenswert?

dafür gibts datenblätter, schau da rein.

von Daniel W. (pegasus)


Lesenswert?

Hallo Leopold,

>>Wieviel Stromverbrauch habe ich mit dem At ...

also der ATtiny13 (siehe mein Posting vom: 16.07.2009 23:14)
hat folgenden Stromverbrauch:

Stromverbrauch bei 5V:
2,6 mA wenn LED aus
3,4 mA wenn LED ein

Dein Akku mit 800mAh würde (bei einem Durchschnitts-Strom von 3mA) 11 
Tage und 2 Stunden halten.

von Vlad T. (vlad_tepesch)


Lesenswert?

wie kommst du auf 0,8mA für die LED?

>2,6 mA wenn LED aus
Das ganze geht viel sparsamer (ein paar µA)


das Haupt Programm besteht nur aus:
Watchdog auf maximale Zeit (8sec) initialisieren und Interupt mode 
configurieren. (Datenblatt abschnitt 8.4)
leere endlosschleife,

Die Watchdog-ISR:
die mitzählt und alle 7-8 mal eine sec. lang den Pin anschalten
am ende der Routine in den power-down modus gehen


Um das ganze noch sparsamer zu machen, den internen Takt auf 128 kHz 
fusen (und den CPU-Prescaler in der Main am anfang auf 256 stellen - 
weiß nicht ob das wirklich Strom spart).

Vorsicht ich bin mir nicht sicher, ob man den mit 128kHz noch per isp 
programmieren kann.

Edit :
Den Strom im Power-Down kannst du fast vernachlässigen
wichtig ist also nur noch der "An"-strom

Ne normale LED braucht ca 20mA, der AVR mit 128kHz 0,2 + WDT.
macht großzügig 21mA
großzügig 25, da er ja zwischendurch für ein paar Takte aufwacht und 
auch im Schlaf ein wenig verbraucht
25 * 1/60 Dutycycle = 0,42 mA
-> 800/0,42 -> 1900h = 79 Tage

Wenn ich Fehler gemacht habe korrigiert mich bitte

von Vlad T. (vlad_tepesch)


Lesenswert?

Edit:
so funktioniert es doch nicht:
der Power down muss raus aus der ISR in die mainloop

von Vlad T. (vlad_tepesch)


Angehängte Dateien:

Lesenswert?

hab das ganze mal aufgebaut.
im anhang der Code.

Mein Messgerät misst 5µA in der Zeit wo die LED aus ist.
Wobei das das unterste Ende der kleinsten Scala (2000µA) meines 5€ 
Baumarktmessgerätes ist.

Betrieben war er mit 5V, die FUses sind auf 4,8Mhz
gestellt intern der höchste Prescaler eingestellt.
Macht eine resultierende Frequenz von 18,750kHz -> das sollte im Tool 
als CPU-Frequenz eingestellt werden, damit die 1000ms Wartezeit 
funktionieren.

Der Watchdogtimerfrequenz ist spannungsabhänig.
Das heißt bei geringeren Spannungen muss man gegebeennfalls ein wenig 
experimientieren bis man eine Blinkfrequenz erreicht hat, die einem 
gefällt.

von E...... B. (ludwig63)


Lesenswert?

Ich habe eine frage

Ich habe mit dem Attiny13 ein lauflicht gebaut möchte aber mit einen 
Porti die Takt erhöhen wie geht das

Das Ganze unter Bascom

Ich bitte um Antwort

von Frank T. (frank_t40)


Lesenswert?

Was ist Porti am Attiny13 ?
Ich kenne nur portb.0 bis portb.5
Was ist die Takt erhöhen? Schneller durchlauf,mehr Pause ,etc.
Nur bei konkr.Fragen kann man auch konkret antworten.
Wie viele einzelne nacheinander leuchtente LEDs sollen angeschlossen 
werden?
4 oder 8 oder 10 oder 12Leds.

von MiWi (Gast)


Lesenswert?

Eberhard B. schrieb:
> Ich habe eine frage
>
> Ich habe mit dem Attiny13 ein lauflicht gebaut möchte aber mit einen
> Porti die Takt erhöhen wie geht das
>
> Das Ganze unter Bascom
>
> Ich bitte um Antwort

Dann fang einen neunen Thread an und fladere nicht einen 6 Jahre alten.

Und ansonsten: RTFM

steht alles in der Hilfe vom Bascom

Grüße

MiWi

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.