PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom-AVR-Tutorial



Murus
31.08.2005, 15:51
Hallo liebe Programmierer,

da ich schon nach einem Bascom-Programmier-Tutorial gegoogelt habe und auch keines gefunden habe, möchte ich hier eines eröffnen... Bascom vom tiefsten Grund korrekt bedienen und benutzen.

Ich hab mir für den Einstieg in die programmierbare Elektronik zwei ATmega8-16PU gekauft und das nötige Zubehör.
Zum Zubehör gehört auch ein ISP-Adapter.
Ich habe das Bascom auf meinem alten Laptop (Win98Se, 233Mhz, 2Giga Platte, 256mB Ram) installiert.
Als Definitionsdatei hab ich m8def.dat eingestellt, sollte stimmen.
Und hier beginnt der Fragenkatalog... 8-[

1.) Bascom:
1.1: Wenn ich unter den Optionen neue Einstellungen speichern möchte, sagt mir Bascom: "There is no default printer currently selected"..
Häää, soll ich da ein Drucker installieren? Wie zu beheben?
1.2: Im Anhang 2 hat es ein Foto meiner Druckerports. Am Port ganz links kommt der Adapter hin. Nur: Welcher ist das? Com1, Com2 ??

2.) Hardware
2.1 Im Anhang 1 hat es ein Foto der 10Pin-Buchse des ISP-Adapters. Wo ist Pin 1, wo pin 10? (Pin 10 kommt an GND, Pin 1 an MOSI).

So, das wäre es fürs erste, ich hoffe, ihr könnt mir helfen.

Herzliche Grüsse
Mario

Rage_Empire
31.08.2005, 15:54
normalfall rote leitung ist pin1. sollte auch ein schwacher pfeil auf dem stecker zu sehen sein. und so wie dein Bild vom laptop aussieht, hast du nur com1.

Murus
31.08.2005, 15:56
Ok, aber welcher ist es? Der obere oder der untere? Wo ist Pin 10?

Das mit dem "default Printer" konnt ich beheben, indem ich einfach in der Systemsteuerung einen Standarddrucker installierte!
Doch: Welcher Anschluss ist das? Com1?

Herzliche Grüsse
Mario

Frank
31.08.2005, 17:23
Bist du sicher das du überhaupt ISP Kabel für COM Port hast? Die meisten ISP Kabel werden am Druckerport angeschlossen.
Siehe:
https://www.roboternetz.de/wiki/pmwiki.php?n=Main.AVRISP
und
https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Avrbascom

Millenniumpilot
31.08.2005, 17:23
Hallo Mario,

wenn Du nur eine serielle Schnittstelle am Notebook hat, dann kann es wohl nur Com1 sein.
Der kleine Pfeil auf dem Stecker müsste Dir genau die POS 1 anzeigen.

Gruß Dirk

Edit: Habe gerade noch einmal das Foto angeschaut. Der Port für den Adapter heist LPT1, falls das Deine eigendliche Frage war.

Bratwurst
31.08.2005, 17:28
Hallo,

das mit der roten Leitung probiere doch einfach mal mit einem Durchgangsprüfer. Also welcher Pin zur roten Ader gehört.
Und dein COM1 ist dein eiziger vorhandener serieller Port (so wie man das auf dem Bild erkennen kann) und das wäre der Zweite von Rechts. Das Ding mit den 9 Pins ;)

hoffe dir geholfen zu haben

Murus
31.08.2005, 18:05
Äh, moment mal! Im Bascom kann man ja zwischen den Ports Com1-ComX auswählen.....
Ich hab hier nen ISP-Adapter mit 28 Pins, der genau auf den Port ganz links passt... (Druckerschnittstelle) Wie stelle ich das jetzt im Bascom ein? Der hat ja da kein LPT1..

"Panikkrieg"....

Herzliche Grüsse
Mario

PS: Oh, wo wir beim ISP sind: Auf Pin 2 kommt ja +5V. Wie schliesst ihr das an? Direkt an +5V oder über eine Diode? Pin 4,6,8,10 kommt ja direkt an die Masse der Versorgungsspannung...

Pin 1 ist auf dem Bild oben links, Pin10 unten rechts, danke für die Hilfe!

PicNick
31.08.2005, 18:24
Bei den Options/Programmer gibt es Tabs für seriell und parallel. in einem der beiden bietet er LPT1 an. in welchem ? richtig !

Murus
31.08.2005, 18:40
Hmmm ah, LPT-Address: Ist da 378 Ok? Und Port delay? 0 gut?
Bleibt nur noch die Frage mit der Belegung des Pin 2 des Adapters zu lösen: Kommt da nun ne Diode ran oder kommt er direkt an Plus?

Herzliche Grüsse und vielen Dank

Mario

Murus
31.08.2005, 19:46
Ok, ich habs! Pin2 kommt direkt an Vcc.

Nun: Jetzt können wir mein erstes Programm schreiben...
Ich schliesse an Port PD2, PD3 und PD5 je eine LED über einen Widerstand(150 Ohm = 2V für LED und 0.02A Strom) gegen Masse an. (korrekt?)
Ziel ist es, jeweils eine dieser 3 LEds leuchten zu lassen.
Hier mal mein Versuch: zuerst soll PD3 leuchten.



$regfile = m8def.dat ; ich hab einen ATmega8
$crystal = 1000000 ; ich verwende (noch) den internen Oszi
$baud = 9600 ; ist das nötig? ich verwende LPT1.

DDRD = &B0001000 ; Pin PD3 als Ausgang konfigurieren (was
heisst das eigentlich?) Brauchts da 7
Nullen wegen 7 Ausgängen? Nee, ich
komm so nur auf 7 Ports, die man
steuern kann, hää?
PORTD =&B11111111 ; PD0-PD7 auf High (+5V) setzen.
Wieso brauchts hier 8 Ziffern? Welche
für welchen Port?
do ; wo "herum" macht er den loop??
loop
end



Hmm, kann das funktionieren?
Wieso hats im DDRD-Register nur 7 Ziffern, obwohl da 8 PD-Ports sind?
Im PORTD-Register hats die 8 Ziffern...
Was gibt es zu verbessern?
Wieviel A halten die Ports aus?

Herzliche Grüsse und vielen Dank
Mario

Frank
31.08.2005, 21:52
@murus:
Zur LPT-Adresse hab ich dir doch vorhin schon Link gegeben wo du Einstellungen siehst:
https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Avrbascom
Und bei Registern werden die Bits von 0 bis 7 gezählt. Also 0 mitzählen, dann sind es 8


Belegung des ISP Stecker siehst du auch hier
https://www.roboternetz.de/wiki/pmwiki.php?n=Main.RNIspstecker

Pin2 sind die 5V zur Versorgung des ISP Dongels

Millenniumpilot
01.09.2005, 05:15
Hallo Murus,

ich würde Dir Vorschlagen, Dir das Buch "AVR Mikrocontroller Lehrbuch" von Roland Walther zuzulegen. Dort werden alle Deine bisherigen Fragen angesprochen.
Die Ausgänge kannst Du nur mit 20mA, sprich 0,02A belasten.
Die Ports B, C und D haben eine unterschiedliche Anzahl von Pins (6, 7 oder 8). Der optischen Übersichtlichkeit halber werden die Register im Bascom oft mit 8bit gesetzt, dabei werden unbenutzte Pins aber ignoriert.
Das steht aber auch alles in dem genannten Buch. Ich kann es Dir aus eigener Erfahrung empfehlen.

Gruß Dirk

Murus
01.09.2005, 06:20
Ok, Buch ist bestellt.....
mal sehen, wie das herauskommt..
Stimmt der obige Code? Möchte nämlich mal schnell testen, ob die Gurke funktioniert, bis das Buch kommt... Sonst bleib ich wieder irgendwo hängen...
Oder hat sonst wer einen Code, um ne LED anzuschalten ohne Taster?

Greets
Mario

Bratwurst
01.09.2005, 09:31
Bis das BUch kommt kannst du dir einmal die Beispiellektionen auf www.rowalt.de anschauen. Dort sind Ports UART und Timer schonmal erklärt !

greetz

Millenniumpilot
01.09.2005, 09:33
Hallo Murus,

das mit der Bestellung ist eine gute Idee von Dir. Du wirst es nicht bereuen.

Der Code ist schon i.o.
Du kommst nur Ducheinander, weil dort unbenutze Pins mitgesetzt werden, welche Du garnicht brauchst. Eventuell ist ja dies hier für Dich übersichtlicher:


$regfile = m8def.dat ; Ok für ATmega8
$crystal = 1000000 ; richtig für den internen Oszi
$baud = 9600 ; falls Du etwas an die serielle Schn. anschließen willst

DDRD.3 = 1 ; Pin PD3 als Ausgang konfigurieren
PORTD.3 = 1 ; PD3 auf High (+5V) setzen.

do ; wo "herum" macht er den loop??
' mache nichts weiter
loop
end

Weil Du zum Einschalten der LED den Ausgang auf Hi legst, muß die LED natürlich mit der Kathode nach Masse (Minus) gelegt sein. Den Vorwiderstand nicht vergessen.

Murus
01.09.2005, 15:32
Ok, vielen Dank! Das Buch wird sicher helfen...
Na dann! Auf ins Abenteuer! Ich werd heut abend mal den obigen Code draufbügeln und testen, ob es geht! Das Bascom-Basic ist ja recht einfach...

Herzliche Grüsse
Mario

Murus
01.09.2005, 18:43
Jaaaaa!!!!! Es hat geklappt!!!!! Geil, die LED leuchtet... Haha, juhuuuuu, Erfolgserlebnis! *Freu!*

Millenniumpilot
01.09.2005, 18:55
Hallo,

und jetzt noch einen Taster ran und die LED damit schalten ;-)

Dirk

Murus
01.09.2005, 19:21
Hmm, moment mal: Kann ich einen Taster direkt an den Pin anschliessen (den anderen Pin des Tasters an GND)... eher net, sonst killts den AVR...
Wo kommt der externe Pullup hin, wie sieht das aus?
Kann ich dann machen:
DDRD.5=0 (Pin 5(Taster) = Eingang)
do
If PIND.5=1 Then
PORTd.3=1
Else
Portd.3=0
Endif ; brauchts ein Endif?
loop

Millenniumpilot
01.09.2005, 19:45
Hallo,

hier mal ein paar Codefragmente für Dich, einfach in Deinem Programm mit einbauen:

'Konfiguration eines Einganges für die Taster
Portd.4 = 1 'PullUp von Pin PD5 aktivieren
Ddrd.4 = 0 'als Eingang'

Declare Sub Keypressed 'Subs müssen deklariert werden'

do
Debounce Pind.4 , 0 , Keypressed , Sub 'Entprellt
loop
end

Sub Keypressed
Toggle PORTd.3 'oder was Du willst
End Sub


den Schalter einfach mit einem Anschluß an Masse, den anderen Anschluß an den Controller-Port

Gruß Dirk

Marco78
02.09.2005, 14:17
Hmm, moment mal: Kann ich einen Taster direkt an den Pin anschliessen (den anderen Pin des Tasters an GND)... eher net, sonst killts den AVR...
Wenn du den Pin als Ausgang geschaltet hast und da zufälig grade H anliegt ja. Ansonsten kann der Taster direkt angeschlossen werden.

Millenniumpilot
02.09.2005, 14:47
Hallo,

Wenn du den Pin als Ausgang geschaltet hast UND da zufälig grade H anliegt UND der Taster gerade betätigt wird, DANN ja.

Marco78
02.09.2005, 15:09
Wenn du den Pin als Ausgang geschaltet hast UND da zufälig grade H anliegt UND der Taster gerade betätigt wird UND du keine Strombegrenzung eingebaut hast, DANN ja.

Millenniumpilot
02.09.2005, 15:24
Hallo Marco,

;-)
Ich wollte nur nicht soviel schreiben und habe Deinen Satz einfach übernommen. Das habe ich nun davon. ;-)
Sollte keine Kritik an Deiner Aussage sein, sondern nur ein weiterer Hinweis an den OP. Dieser denk sonst, es geht sofort etwas kaputt.
BTW wird aber ansonsten keine Strombegrenzung eingebaut, d.h. der Schalter wird direkt an den Port geschalten.

Gruß Dirk

Marco78
02.09.2005, 15:37
Recht hast du ja!
Gewisse Dinge werden im Laufe der Zeit so selbstverständlich wie das Atmen. Erst wenn ein Ladungsunterschied zwischen zwei Punkten besteht und diese zwei Punkte ohne Widerstand verbunden werden fliesst ein (sehr) hoher Strom. Der entscheidene Punkt dabei ist das direkte verbinden. Wenn man sowas weiss, schreibt man es nicht immer dazu. Wer aber an sowas nicht denkt fühlt sich beim programmieren ggf unnötig unter Druck gesetzt um zu verhindern das dieser Fall durch Programmierfehler eintreten kann. Und erst recht das führt zu Fehlern.

Meine Retourkutsche war aber auch nicht so böse gemeint wie sie evtl klang!