Troubles Installation von ISP AVR-mkII mit AVR Studio 4

Welcher Mega8 das ist, sollte Bascom eigentlich weitgehend egal sein (auf den Takt hat Bascom nahezu keinen Einfluss, und die Gehäuseform ist für das Programm fast irrelevant (mal abgesehen von den beiden zusätzlichen ADC. Nun zu Deiner Frage:
AFAIK kannst Du den gewünschten Controller auch irgendwo bei den "BASCOM-AVR Options" (siehe StevieL's Bild) vorauswählen (Compiler -> Chip) - sicherheitshalber würde ich(!) aber immer zu Beginn des Programmes den Controller per Hand vorgeben. Das geschieht mit:
Code:
$regfile = "cotrollerdefinitionsdatei"
für den Mega8 sollte das die "m8def.dat" sein.
Danach solltest Du Bascom gleich sagen, wie schnell der µC getaktet ist (damit Bascom Verzögerungen (wait) oder irgendwelche timings (Baudrate etc) berechnen kann). Mit:
Code:
$crystal = Frequenz in Hertz
Falls der UART verwendet werden soll, als nächstes die Baudrate, und dann die gewünschte Aufteilung des SRAM in die HW/SW-Stack und Framesize.
Wenn diese Angaben im Quellcode auftauchen, werden die entsprechenden Options ignoriert.
P.S.: vielleicht hilft Dir auch die Online-Hilfe weiter.
 
Steckbrettaufbau

Hallo Freunde,

LodataC, danke für den Hinweis für die beiden Befehle.

Cassio
Erst einmal wäre zu klären, ob du nun unbedingt mit deinem Walter-Aufbau weiter machen möchtest,
oder ob du ggf. auch zu einem Steckbrett-Aufbau wechseln würdest.

Wenn du für deine ersten Schritte mit einem Steckbrett zufrieden wärst, dann würde ich das mit dir durchziehen.
Dafür bräuchten wir dann noch nicht mal Skype..... wäre aber ggf. auch vorhanden.

Es liegt also bei dir.....
Oder hat sich schon jemand für Skype gefunden?
Nehme Dein Angebot gerne an und bedanke mich dafür. Für SKYPE hat sich niemand gemeldet.
Habe den Aufbau mit dem Steckbrett schon gemacht. Will alles noch durchmessen. Dann sende ich ein Foto vom Aufbau, noch ohne eingesteckten IC (dieser daneben mit Qualitäts-Sockel).
Will das Foto wie bei Dir noch beschriften. Das Buch lege weg!

Nun bin ich zuversichtlich, dass ich auf einen grünen Zweig komme.
Kann meine Fotos erst Montag früh senden. Nach Beschriftung. Dann kanns losgehen! Freue mich schon darauf!
Will dann meinen letzten (3.) noch jungfräulichen Atmega8 in den Sockel stecken, damit ausgeschlossen werden kann
dass er durch meine bisherigen Versuche schon im IC-Himmel ist.

Bis morgen!
Gruß Jordy
 
Hi
Ich kenn Bascom zwar nicht, aber einen Hinweis bezüglich gehimmelter Controller möcht ich dennoch loswerden. Wenn ich es richtig verfolgt hab, arbeitest du mit Steckbrett. Denk dran, das du erst einmal beim interne Takt bleibst, denn wenn du einen anderen einstellst und Bascom das nicht durch separate Eintragung in die Fuses sichtbar macht, ist der Controller erst mal weg. Er ist nicht defekt, aber die "Reannimierung" würd dich jetzt noch mehr frustrieren. Schade, das du nicht in Assembler wurschtelst... da könnt ich wenigstens mitreden.
Trotzdem wünsch ich dir einen baldigen Erfolg. Nicht das du wieder abtrünnig wirst.
Gruß oldmax
 
Hallo Cassio, servus Oldmax!

oldmax
Ich kenn Bascom zwar nicht, aber einen Hinweis bezüglich gehimmelter Controller möcht ich dennoch loswerden. Wenn ich es richtig verfolgt hab, arbeitest du mit Steckbrett. Denk dran, das du erst einmal beim interne Takt bleibst, denn wenn du einen anderen einstellst und Bascom das nicht durch separate Eintragung in die Fuses sichtbar macht, ist der Controller erst mal weg. Er ist nicht defekt, aber die "Reannimierung" würd dich jetzt noch mehr frustrieren. Schade, das du nicht in Assembler wurschtelst... da könnt ich wenigstens mitreden.
Trotzdem wünsch ich dir einen baldigen Erfolg. Nicht das du wieder abtrünnig wirst.
Danke für Hinweise! Ja, da verändere ich nichts. Außerdem stecke ich fabrikneuen ATMEGA8 rein und warte auf Cassios Anweisungen, damit nichts daneben geht.
SCHALTBRETT1.jpg

Cassio ich habe einen Stecker aufs Board gegeben. Pin1 ist rot markiert. Nun mache ich nicht mehr den Fehler von vorhin. Habe alle pins durchgeklingelt vom IC zum Stecker, sogar die beiden R ausgemessen, auch die LED getestet. 5V an VCC und Minus an pin14 des Sockels, sie leuchtet.

Bitte um weitere Anweisung in Reihenfolge!

Gruß Jordy
 
....warte auf Cassios Anweisungen, damit nichts daneben geht.


Hallo Jordy!

So so.... du wartest also auf meine Anweisungen.....
und warum leuchtet deine LED dann? :hmmmm:
Habe ich etwas von Anschließen und Strom anlegen geschrieben? :wink:



OK... war nur ein Spaß! :D
Dann wollen wir mal.....

Den Mini-Testaufbau hast du ja nun fertig.
Was ich auf dem Foto nicht richtig erkennen kann, ist der Anschluss für AVcc!
Hast du die Eingangsspannung vielleicht auf ARef (Pin 21) gelegt, anstatt an AVcc (Pin 20)? :hmmmm:
Auf dem Foto sieht das jedenfalls so aus!

Wenn das so sein sollte, dann bitte dringend ändern!


Danach kann es dann weitergehen.....
Im BASCOM hast du ja schon die Einstellungen für den Programmer eingetragen und deinen letzten Snapshots zufolge kann er auch angesprochen werden.
Bei mir sehen die Einstellungen zum Beispiel so aus:
Programmer_einstellungen.gif
Es sollte bei dir also ähnlich aussehen.... und muss nicht genauso sein!


Nun schreibst du in einer LEEREN Datei folgenden Programmkopf:
Programm_Header.gif

WICHTIG:
Ich habe hier zur Zeit nur einen ATMega8A !
Lass dich davon nicht verwirren!
Wenn du einen ATMega8 Chip (ohne A) hast, dann ist das eben so und du musst nur die Definitionsdatei "$regfile" z.B. auf "m8def.dat" anpassen!


Das ASCII-Bild vom ATMega8 stelle ich hier mal ein, damit du es nicht selber schreiben musst :wink:
Code:
'         ---------------ATMega8----------------
'                       +---v---+
'           (RESET) PC6 |1    28| PC5 (ADC5/SCL)
'             (RXD) PD0 |2    27| PC4 (ADC4/SDA)
'             (TXD) PD1 |3    26| PC3 (ADC3)
'            (INT0) PD2 |4    25| PC2 (ADC2)
'            (INT1) PD3 |5    24| PC1 (ADC1)
'          (XCK/T0) PD4 |6    23| PC0 (ADC0)
'                   VCC |7    22| GND
'                   GND |8    21| AREF
'     (XTAL1/TOSC1) PB6 |9    20| AVCC
'     (XTAL2/TOSC2) PB7 |10   19| PB5 (SCK)----------ISP
'              (T1) PD5 |11   18| PB4 (MISO)---------ISP
'            (AIN0) PD6 |12   17| PB3 (MOSI/OC2)-----ISP
'            (AIN1) PD7 |13   16| PB2 (SS/OC1 B)
' LED_1------(ICP1) PB0 |14   15| PB1 (OC1A)
'                       +-------+



Im Anschluss an den Programmkopf (ab Zeile 66) folgt nun das "Hauptprogramm" mit einer blinkenden LED!
Das machen wir ganz simpel mit:
Code:
'Programmschleife---------------------------------------------

Do

Led_1 = Ein
 Waitms 500

Led_1 = Aus
 Waitms 500

Loop

End                                                         'end program


Wenn alles richtig ist, sollte sich das Programm kompilieren lassen.
Dazu kannst du entweder "F7" drücken, oder auf den schwarzen Chip in der Menüleiste von BASCOM klicken--> Flash_Button.gif
Die Flash-Größe beträgt etwas 2% !

Jetzt verbindest du den Programmer mit dem PC und danach mit dem ISP-Anschluss am Testaufbau.
Wenn alles OK ist, leuchtet die innere LED im Porgrammer grün (USB-Verbindung OK) und die obere LED auch grün (Testaufbau hat Spannung).


Wenn du nun auf "Program Chip" klickst (bzw. F4 drückst) sollte deine Anzeige so aussehen:
Flash_Test_1.gif


Jetzt klickst du aber erst einmal auf "Lock and Fuse bits", damit wir die Werkseinstellungen kontrollieren können.
Spätestens jetzt weißt du auch, welchen Mega8 du genau im Sockel hast (Mega8, Mega8A, ....) :wink:
Nach dem Auslesen des Mega`s sollte dein Fenster so aussehen:
FUSES_Mega8a.gif


Wenn alles passt, klickst du wieder auf "Flash" und programmierst den AVR !

Nach dem Übertragen des Programms sollte die LED an PortB.0 nun munter blinken. :D


Grüße und gutes Gelingen,
Cassio
 
Probleme mit Datei schreiben

Hallo Cassio,

zuerst danke für alle Infos!

Hast du die Eingangsspannung vielleicht auf ARef (Pin 21) gelegt, anstatt an AVcc (Pin 20)?
Auf dem Foto sieht das jedenfalls so aus!

Wenn das so sein sollte, dann bitte dringend ändern!
Hab ich tatsächlich falsch angeschlossen, nun auf pin20 gelegt!
Danach kann es dann weitergehen.....
Im BASCOM hast du ja schon die Einstellungen für den Programmer eingetragen und deinen letzten Snapshots zufolge kann er auch angesprochen werden.
Bei mir sehen die Einstellungen zum Beispiel so aus:
Anhang 4206
Es sollte bei dir also ähnlich aussehen.... und muss nicht genauso sein!
Habe ich nun genau so eingestellt. Nur auf COM4. Das dürfte aber nichts machen?

Nun Datei>Neu geöffnet und genau nach Deiner Vorlage händisch alles eingeschrieben. Da machte ich den ersten Fehler. Habe die Zeilennummern mitgeschrieben.
Nachdem ich alles fertig hatte, drückte ich F7. Da kam ganz unten Fehlermeldung schon für Zeile 1 und 2. Da habe ich nun die Zeilennummer rausgenommen in
der 1. Zeile und wieder F7 gedrückt. Da war in Zeile 1 kein Fehler mehr. Nach Entfernung aller Zeilennummern war endlich kein Fehler mehr nach Drücken F7.
Hier 2 Screenshoots mit Fehlern:
Anhang anzeigen 4208

Anhang anzeigen 4209
Und hier ohne Zeilennummern:
Testprog_Jordy3.png

Testprog_Jordy4.png


Die Flash-Größe beträgt etwas 2% !

Jetzt verbindest du den Programmer mit dem PC und danach mit dem ISP-Anschluss am Testaufbau.
Wenn alles OK ist, leuchtet die innere LED im Porgrammer grün (USB-Verbindung OK) und die obere LED auch grün (Testaufbau hat Spannung).
Bis hierher alles ok!

Aber nachdem ich F4 drückte, kamen unten folgende Warnungen:
F4-Bildschirm.png
Was habe ich da falsch gemacht? Wahrscheinlich beim abspeichern!
Bitte um weitere Ratschläge!
Gruß Jordy
 
Hallo Jordy!

Ich glaube, du hast gar nichts falsch gemacht!
Diese Fehlermeldung, dass er die *.EEP Datei nicht finden kann, bekomme ich auch, wenn ich einmal F7 und F4 verwendet habe!
Ich nutze sonst eigentlich immer nur die Buttons mit der Maus. :wink:

Das Programm lässt sich aber trotz "Fehlermeldung" flashen!

Probiere es einfach mal aus!

Grüße,
Cassio
 
Der Hinweis sagt, daß keine Daten ins Eeprom geschrieben werden, da die entsprechende Datei fehlt. Warum fehlt die Datei? Weil Ihr keine Dten ins Eeprom schreiben laßt. (Das Programm enthält schlichtweg keine Eeprom-Daten, also alles iO)
AFAIK wird irgendwo in den Options eingestellt, ob generell Daten ins Eeprom geschrieben werden sollen (wegen begrenzter Schreibzyklen...)
Das Schreiben in den Program-Flash war erfolgreich, mMn sollte die LED blinken.
(Ist hier eigentlich ein Trennen des Programmers, und ggf ein manueller (zB Power up-) Reset nötig?)
btw hat Du da noch einen copy&paste-Fehler bei PortC drin...
 
Hallo Jordy!

Auch wenn deine LED nun inzwischen schon blinken sollte.......
es sind ein paar Fehler im Programmcode.

Siehe Bild:
Fehler_Jordy.gif

Den fehlenden Unterstrich bei "DDRB" haben wir ja schon geändert...... und seit dem funktioniert das Programm ja auch!

Bei "DDRC" hast du anschließend "PORTD" geschrieben!
Es müsste natürlich "PORTC" heißen!

Dann musst du die einzelnen Pins bei "PORTC" noch korrigieren, denn es gibt nur PC0 bis PC5, also &B00_0000 !


Grüße,
Cassio


PS @all:
Die Sache mit den "Fehlermeldungen" haben wir schon geklärt und Jordy weiß jetzt auch dass es Hinweismeldungen sind und keine "echten" Fehler, sowie was die BIN und EEP Erweiterungen bedeuten.
 
Genau genommen gibt es auch PC6, der ist halt wegen ISP nur vom Port abgekoppelt. Aber darum gehts jetzt nicht. Letztlich sollte es doch aber keine Rolle spielen, ob Du "&B00_0000", "&B0_0000" oder gar nur"&B0" in die Register schreiben läßt. In jedem Fall ist das doch gleich dezimal 0, oder eben "&B0000_0000".
Außerdem könnte man sich diese Zuweisungen hier komplett sparen, da alle Datenrichtungsregister und Port-Register nach dem Reset 0 (=&B0000_0000) sind. Alle I/O-Pins sind tristate. Ok, so steht es halt sauber erklärt im Sourcecode, aber ein Kommentar sollte das auch dokumentieren.

Noch eine Frage: Bei den Zuweisungen der Datenrichtungsregister schreibt ihr generell einen Unterstrich zwischen "B" und die Bits, bei den Port-Registern nicht. Gibt es einen Grund für diese ... ähm ... Ununiformität? (generell sollten diese Unterstriche ja vom Compiler ignoriert werden)
 
Bei den Zuweisungen der Datenrichtungsregister schreibt ihr generell einen Unterstrich zwischen "B" und die Bits, bei den Port-Registern nicht. Gibt es einen Grund....

Hallo Lota!

Zum Einen kannst du nicht "IHR" schreiben, weil es MEINE Angewohnheit ist :wink:
und zum Anderen gibt es nur den Grund der leichteren Lesbarkeit und schnelleren Übersicht.
Natürlich werden die Unterstriche vom Compiler ignoriert und darum ist es auch nur "Kosmetik".

Es geht also nur darum, dass alle Werte direkt untereinanderstehen.

Code:
Beispiel mit Versatz:
'Pins----7654_3210
'        ||||_||||
DDRX = &B1100_1100
'        \\\\_\\\\
PORTX = &B0011_0011


Beipsiel mit Unterstrich:
'Pins-----7654_3210
'         ||||_||||
DDRX = &B_1100_1100
'         ||||_||||
PORTX = &B0011_0011

Für Anfänger ist das so einfacher lesbar.... und selber mag ich die "geordnete" Ansicht auch lieber. :cool:




Letztlich sollte es doch aber keine Rolle spielen, ob Du "&B00_0000", "&B0_0000" oder gar nur"&B0" in die Register schreiben läßt.

Natürlich wäre das Egal!
Eine NULL bleibt eben eine NULL.... egal wieviele Nullen ich noch davor schreibe!
Allerdings geht es hier ja nicht darum eine NULL zuzuweisen sondern das man erkennt, warum sich eine gewisse binäre Zahl ergibt.
Tja und wenn man von einem Port nur 0-5 verwenden kann (weil der 6. noch für Reset benötigt wird), dann sollte man auch nur die sechs Nullen (oder Einsen) verwenden!


Ich finde, man sollte immer berücksichtigen WER eine Frage stellt.
Es nützt einem Anfänger nichts, wenn man versucht ihm gleich "alle" Infos und Besonderheiten zu einer Frage zu erklären.
Einem Grundschüler bringt man beim Schreiben lernen auch nicht gleich alle Zeitformen und Regeln der Rechtschreibung bei.... sondern über Jahre nach und nach!
Tja und selbst das fruchtet bei einigen Leuten dann nur teilweise..... und das ist beim Erlernen des Programmierens auch nicht anders. :cool:


Grüße,
Cassio
 
Also daß die gleichwertigen Bits ordentlich untereinander stehen. Macht natürlich Sinn. Bin ich gar nicht drauf gekommen (deswegen ja die Frage;)). Und na klar, es ist Deine Schreibweise, aber letztendlich gibst Du sie ja (u.a.) an Dieter weiter.
(und 'tschuldigung, wenn ich hier wieder irgendwelche Türen eingerannt habe.
 
Nun funktionieren alle 3 ATmega8! Bin happy!

Hallo Cassio und alle anderen Freunde!

Danke für Eure Hinweise! Kam einfach nicht zurecht gestern! Da machte mir Cassio spät abends das Angebot, über SKYPE zu sprechen.
Das war es!
Zuerst erklärte er mir, was es mit der Zeilen-Nummerierung auf sich hat und wo man sie ein- und ausschalten kann.
Und dass dies keine Fehlermeldungen sind, er erklärte mir den Sinn dieser Angaben. Auch andere Einstellungen.
Dann gings doch nicht gleich. Bei genauem Hinsehen auf meine Datei merkte er, dass ich einen Unterstrich nicht setzte. Es ist aber
kein Fehler ausgegeben worden. Als ich den Unterstrich setzte, die Datei nochmals mit F7 kompilierte, unter F4 den ATMEGA8 löschte
und neu programmierte, blinkte die LED erstmals. Da freute ich mich riesig!:) Nochmals ein Dankeschön an Cassio!

Heute früh habe ich die anderen Änderungen am Programm vorgenommen, welche von Cassio vorgeschlagen wurden. Da scheint es
bei den Unterstrichen doch nicht so wichtig zu sein, ob man sie setzt oder nicht. Habe auch alle Zahlen 4-stellig gemacht. Geht auch
mit diesen Einstellungen. Will mal testen, wenn ich alle Unterstriche weglasse und dann berichten. So sind die Einstellungen derzeit:

Nun habe ich die zwei anderen ATmega8-16PU der selben Prozedur unterworfen, um zu sehen ob sie noch ok sind! Auch bei diesen
blinkt die LED. Habe sie also nicht abgestochen! Nun will ich nochmals die selbe Prozedur an meiner Experimentierplatine durchführen.
Hoffe, es geht dort auch. Damit wäre die Installation der Hardware abgeschlossen!

Möchte dazu bemerken, dass ich mit meinem Buch (AVR-MIKROCONTROLLER-LEHRBUCH von Roland Walter) nie soweit gekommen wäre.
Das soll keine Spitze gegen dieses Buch sein, aber generell sind Bücher schnell veraltet, wenn neue Versionen von Windows, von
AVR-Studio und BASCOM-AVR kommen. Dann sind andere Screenshoots im Buch zu sehen und andere Vorgehensweisen beim Installieren
beschrieben, welche bei Drucklegung des Buches noch aktuell waren in den damals aktuellen Versionen, sich heutzutage aber stark
unterscheiden. Für geübte Anwender mag das kein großes Problem sein, wohl aber für einen blutigen Anfänger wie mich. Da war der Rat
Cassio's Goldes wert, erst mal das Buch wegzulegen und seinen Vorschlägen zu folgen!

Später kann ich mich wieder dem Buch zuwenden, wenn ich mich ein wenig auskenne. Es sind viele Erläuterungen und interessante
Beispiele darin zu finden! Aber für die ersten Schritte war es für mich unbrauchbar.

Werde Euch wieder berichten, wenn es was neues gibt bei mir. Hoffe ich komme weiter voran! Sonst frage ich wieder Euch!
Nochmals ein Danke für Eure bisherige Hilfe!

Gruß Jordy!
 

Anhänge

  • Progr_new.png
    Progr_new.png
    4,4 KB · Aufrufe: 9
Testprogramm an andere Testplatine angepasst

Hallo Cassio!

Bevor ich nun Dein Test-Programm auch an meiner Experimentierplatine ausführen wollte, ist mir aufgefallen,
dass bei allen 3 LEDS die Kathoden mit Minus fest verbunden sind, im Gegensatz zu Deinem Programm, wo die Kathode an
Pin 14 kommt und wie ich es auf dem Steckbrett aufbaute. Nun will ich aber Dein Programm an die Gegebenheiten meiner
Experimentierplatine anpassen. Damit an Pin 14 (PB0) Hi anstatt Lo ist.

Nun habe ich ein einfaches Programm aus dem Buch nachgeschrieben, wo nur eine LED leuchtet. Das funktionierte!
Die Vorgehensweise lernte ich von Dir.

Nun habe ich Dein Programm versuchsweise abgeändert, damit Pin 14 auf Hi liegt. Da habe ich allerdings nur probiert.
Denn noch durchschaue ich das Programm nicht. Aber es ist mir gelungen. Die Blinkdauer habe ich dann geändert. Das
ist auch nicht schwer mit anderen Werten für Waitms. So sieht es nun aus:

Programmäderung.png

Aber vielleicht habe ich zuviel umgestellt und es wäre nicht alles notwendig gewesen. Was genau hätte ich umschreiben
müssen? Und wo werden diese Befehle genau beschrieben? In der Bascom-Hilfe bin ich nicht fündig geworden.
Im Buch bis jetzt auch nicht!
Bitte um Hilfe dazu!

Gruß Jordy
 
Hi Jordy
Habe jetzt die Programme nicht nachvollzogen, daher hoffe ich, stimmt der Ansatz.
Wenn du LED auf GND schaltest, werden sie mit einem 5 V Signal (logisch 1) zum Leuchten gebracht. Sind die LED's an VCC, so leuchten sie, wenn ein GND-Signal (logisch 0) angelegt wird. Wenn du die LED's mit einem Blinktakt ansteuerst, dann merkst du die "Fehlschaltung" gar nicht, denn deine LED's leuchten, so oder so. Leider kann ich dir, was den Code betrifft, keine vernünftige Antwort geben. Ich bin wie bereits gesagt, ein "Assemblierer". Von BASCOM und C bin ich Welten entfernt.
Gruß oldmax
 
Hallo Jordy!

Ich habe die LED mit dem Vorwiderstand an +5V genommen und schalte den "Minus", weil generell der AVR besser Strom zu GND leiten kann, als selber Strom zu liefern.

In vielen Lehrbüchern wird das aber genau entgegengesetzt gemacht, weil es dann für den Anfänger beim Programmieren "logischer" klingt.


In meinem Programm gibt es ja die festen Konstanten EIN und AUS !
Diese haben wir mit Zahlenwerten NULL und EINS vorbelegt.
Siehe hier:
Code:
Const Ein = 0                                               'Konstante einstellen
Const Aus = 1                                               'Konstante einstellen


Da die LED über den Vorwiderstand permanent mit Spannung versorgt wird,
muss der AVR den PortB.0 ja nur gegen GND schalten (also eine NULL bekommen)

Dies geschieht hier:
Code:
Led_1 = Ein

Alternativ könntest du auch folgendes schreiben:
Code:
Led_1 = 0

In beiden Fällen passiert genau das Gleiche!
Die Konstante EIN ist für den Menschen eben nur einfacher lesbar. :wink:

Technisch sieht das dann so aus:
Code:
      1K8    LED
      ___
Vcc -|___|--->|-------o PortB.0 = 0 (GND)

                        LED leuchtet !




Die Konstante AUS ( Aus = 1 ) sorgt lediglich dafür, dass der PortB.0 das Eingangsspannungspotential annimmt.
Da die LED nun von beidn Seiten mit dem selben Potential verbunden ist (Vcc), kann kein Strom fließen und sie leuchtet auch nicht mehr!
Code:
      ___
Vcc -|___|--->|-------o  PortB.0 = 1 (Vcc)

                     LED kann nicht leuchten!




Wenn bei deiner Testplatine nun alle LED`s fest mit GND verbunden sind, dann musst du eigentlich nur die Werte der Konstanten tauschen.....
Also:
Code:
Const Ein = 1                                               'Konstante einstellen
Const Aus = 0                                               'Konstante einstellen

Damit ist die Funktion genau umgekehrt und PortB.0 versorgt die LED nun mit Spannung (wenn Led_1 = Ein).....
oder eben nicht (wenn Led_1 = Aus).

Technisch sieht das bei dir dann so aus:
Code:
      1K8    LED
      ___
GND -|___|---|<-------o  PortB.0 = Ein ( 1) Vcc

                             LED leuchtet !




      ___
GND -|___|---|<-------o  PortB.0 = Aus ( 0) GND

                          LED leuchtet nicht !


War das soweit verständlich?



Grüße und viel Spaß weiterhin,
Cassio :ciao:
 
...Ich habe die LED mit dem Vorwiderstand an +5V genommen und schalte den "Minus", weil generell der AVR besser Strom zu GND leiten kann, als selber Strom zu liefern....
Das ist ja die übliche Vorgehensweise, aber woher stammt diese Behauptung eigentlich? Laut Datenblatt des Mega8 sind als abs.max DC-Current pro I/O 40mA und 300mA für alles angegeben. Ohne die Richtung zu berücksichtigen.
Als test-condition werden dann 20mA (bei 5V) angegeben - in beiden Richtungen. Das sind die garantierten Werte. Auch die Summen sind bei source und sink (sowohl bei den ports als auch beim gesamten Chip) gleich. (beim 88er hab ich da Unterschiede gesehen, aber hier beim 8er...)
Datenblatt S. 235:
3. Although each I/O port can sink more than the test conditions (20mA at Vcc = 5V, 10mA at Vcc = 3V) under steady state
conditions (non-transient), the following must be observed:
PDIP, TQFP, and QFN/MLF Package:
1] The sum of all IOL, for all ports, should not exceed 300mA.
2] The sum of all IOL, for ports C0 - C5 should not exceed 100mA.
3] The sum of all IOL, for ports B0 - B7, C6, D0 - D7 and XTAL2, should not exceed 200mA.
If IOL exceeds the test condition, VOL may exceed the related specification. Pins are not guaranteed to sink current greater
than the listed test condition
4. Although each I/O port can source more than the test conditions (20mA at Vcc = 5V, 10mA at Vcc = 3V) under steady state
conditions (non-transient), the following must be observed:
PDIP, TQFP, and QFN/MLF Package:
1] The sum of all IOH, for all ports, should not exceed 300mA.
2] The sum of all IOH, for port C0 - C5, should not exceed 100mA.
3] The sum of all IOH, for ports B0 - B7, C6, D0 - D7 and XTAL2, should not exceed 200mA.
If IOH exceeds the test condition, VOH may exceed the related specification. Pins are not guaranteed to source current
greater than the listed test condition
 
Jetzt verstehe ich was da gemeint ist!

:(Hallo Cassio, servus Lota!

Nun alles klar! Habe schon rumgespielt mit Deinem Programm. Hatte beim probieren schon gedacht, dass ich den IC abgestochen habe.
Aber das war es nicht! Ich hatte nur vergessen, dass die Port-Pins von rechts nach links bezeichnet werden! Du hast es ja sehr schön
in den Bemerkungen dargestellt ('Port-Bit-7654_3210) oberhalb derDDRB und PORTB. Mit senkrechten Strichen. Obwohl so übersichtlich,
hatte ich es mal übersehen und von links nach rechts gezählt!:confused: Da ist es klar, dass ich einen falschen Port anwählte. Nun sind alle Unklarheiten
beseitigt. Dieses Beispiel ist super! Nun veränderte ich mal den Ausgabe-Port! Funktionierte auch, wenn man alles beachtet!

Vielen Dank, es geht vorwärts!

Nun kann ich auch im Buch lernen. Wenn ich trotzdem Fragen habe, wende ich mich an Dich (Euch).

Herzlichen Gruß! Jordy
 
Hallo Jordy!

Es freut mich, dass es bei dir voran geht und du selbst nach einigen Tests auf die "Feinheiten" kommst! :D


Noch mal kurz zu MEINER Schreibweise mit den Port-Registern.....

Damit alle Zahlen sauber untereinander stehen, verwende ich folgende Schreibweise:
Code:
'Port-Bit-7654_3210
'         |||| ||||
Ddrb = &B_1111_1011                                         '1 ist Ausgang 0 ist Eingang
Portb = &B0000_0100                                         'auf Hi oder Low setzen

NUR aus dem Grund der übersichtlicheren Schreibweise habe ich bei "Ddrb = &B_1111_1011" den Unterstrich verwendet!
Dieser Unterstrich hat sonst KEINE Bedeutung!
Du kannst also auch "Ddrb = &B1111_1011" schreiben!

Wie du aber selber schon gemerkt hast, darf lediglich kein Leerzeichen vorhanden sein!
Es ist also NICHT erlaubt folgendes zu schreiben:
Ddrb = &B 1111_1011
Ddrb = &B1111 1011
Ddrb = &B 1111 1011

BASCOM meldet zwar keine Fehler, aber die Zuweisung der Pins stimmt trotzdem nicht!


Viel Spaß und Erfolg weiterhin,
Cassio :ciao:
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)