mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmieren mit CodeVisionAVR


Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute!

Habe folgendes Problem: Möchte ein simples Programm schreiben für den 
Mega8L Controller. Das drei LEDs jeweils an Port0 bis Port2 an und 
ausmacht. Wie mach ich das habe zwar schon paar Sachen gefunden jedoch 
gehen die Befehle bei Code Vision nicht ... Kennt sich einer mit 
CodeVision aus wie man da die Ports ansteuert etc. bin für jede hilfe 
sehr dankbar gerne auch links die C Programmierung erklären ambesten für 
CodeVision AVR. Außerdem wäre es sehr nett wenn einer so ein Prog für 
mich schreibt bzw. erklärt wie ich mit Code Vision das machen kann über 
die befehle outp u. ldi geht das leider nicht.

Danke schon mal im Vorraus

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir denn keiner helfen oder benutzt keiner CodeVisionAVR?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eilig? Dann helfen eigene Grundlagen am schnellsten weiter, denn sonst 
musst du beim nächsten kleinen Problem wieder 1/4h warten....
CodeVision ist ein C-Compiler, was du da machen willst, ist Assembler.
Programme schreibe ich grundsätzlich nur gegen Bares. Wenn du einzelne 
spezielle Probleme hast, helfe ich dir gerne.

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich will ja bei CodeVisionAVR Programmieren weiß nur nicht wie man 
z.b Ports zu weißt bzw. Register kann mir vllt einer einen anfang 
schreiben damit ich das prinzip verstehen kann wäre echt nett sonst komm 
ich nie weiter suche schon paar tage im inet aber mit codevision gibs 
fast nix

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du brauchst auch (fast) nichts speziellen zu CV, ist halt ein normaler 
C-Compiler. Und wenn du dann noch den CodeWizard von CV benutz, bist du 
mit deinem Programm schon fast fertig.

Autor: Markus L. (lucky79)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenns nicht unbedingt CodeVision sein muss, dass lade dir das WinAVR 
Package runter und installier das mal, dazu gibts viele viele Tutorials 
im Netz.

Auszug für Dein Problem:
PORTB |= 0x07;

schreint in das Register PORTB deb Wert 0x03 => 0b00000111 was soviel 
heißt wie PB2 PB1 und PB0 auf 1.
Funktion: schaltet die LEDs aus...

Das Gegenteil erreichst du mit
PORTB &= ~0x03;

das schaltet PB2, PB1 und PB0 auf 0 => LEDs leuchten.

Beschaltung:

VCC --> LED --> R --> AVR PORTBx

Immer sorum schalten, da ein Port mehr Strom aufnehmen als treiben kann 
(sdiehe Datenblatt).



Ich glaube im CodeVision funktioniert das ähnlich (aber ohne Gewähr)

Grüße,
Markus

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <Mega8.h>
void main(void) {

PORTD.0=1111110; // Port D0 auf Masse

}



Ist das Prog richtig kann ich dadurch die LED an Port D0 anmachen? Oder 
Wie muss ich das bei Code Vision schreiben?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erstmal musst du dem Port sagen, dass es ein Ausgang sein soll.
Entweder so wie oben, allerdings mit DDRx. Oder mit der CV-spezifischen 
(nicht ganz C-conformen, aber sehr angenehmen) Biterweiterung.

DDRD.0=1;  //als Ausgang
PortD.0=0;  ((Ausgang auf low schalten

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe das Prog soweit erweitert


#include <Mega8.h>
void main(void) {

DDRD.0=1; // Als Ausgang setzen
PORTD.0=0; // Ausgang auf low (Masse) schalten
}



kann ich das jetzt auf den Controller brennen und die LED wird 
eingeschatet sein?

oder fehlt da noch was ?

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@crazy horse

kannst du mir da weiter helfen eventuell das progschreiben. Das die LED 
an PORTD0 an /aus macht. danke schon mal

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist doch völlig sinnfrei. Du musst doch auf irgenwas reagieren, 
zumindest mal blinken lassen oder sowas.
Soll sie nur leuchten, schliess sie doch ganz ohne Controller und 
Software an.

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja dann eben blinken wie muss ich das programm dann dafür schreiben etwa 
so?

#include <Mega8.h>
void main(void) {

DDRD.0=1; // Als Ausgang setzen
PORTD.0=0; // Ausgang auf low (Masse) schalten LED an
PORTD.0=1  // Ausgang auf high schalten LED aus
}


kannst du mir weiterhelfen bitte

Autor: crazy horse (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
du bist ja echt penetrant :-)

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schön !!! sehr nett mal sehen ob es läuft...

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while (1)
      {PORTD.0=0;
       delay_ms (500);
       PORTD.1=0;
       delay_ms (500);
       PORTD.0=1;
       PORTD.1=1;
       delay_ms (500);


      };
}


danke für den code aber hab da noch paar fragen... muss das nicht

PORTD.0=0;
delay_ms(500);
PORTD.0=1;
delay_ms(500);
PORTD.0=1
PORTD.0=0;
delay_ms(500);


heißen oder wieso schreibst du PORTD.1.=1 Das heißt doch PortD1 ist auf 
high 5v oder nicht?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denke, du willst auch mit PortD.1 und PortD.2 was spielen?
"PORTD.1.=1 Das heißt doch PortD1 ist auf high 5v" Genau das.

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja hab das programm jetzt in den controller geschoßen  geht aber nicht 
wie machst du das denn einfach speicher als asm oder h. und dann bei 
ponyprog laden...? kann man irgendwie bei code vision eine hex datei 
erzeugen?

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vitalij, ist 1989 dein Geburtsjahr? Wenn ja, dann solltest du nur den 
WinAVR komplett runterladen und das AVR Tutorial. Dann das Internet 
abschalten und das Tutorial mal richtig durcharbeiten, danach wird die 
LED blinken. Aber nicht wenn du irgendwelches zusammengegoogeltes Zeug 
durcheinander wirfst.

Autor: Willi Wacker (williwacker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vitalij K. wrote:
> ja hab das programm jetzt in den controller geschoßen  geht aber nicht
> wie machst du das denn einfach speicher als asm oder h. und dann bei
> ponyprog laden...? kann man irgendwie bei code vision eine hex datei
> erzeugen?

Du musst in CV ein Projekt erzeugen, Deine C-Datei dem Projekt 
hinzufügen, unter Projekteinstellungen den korrekten Controller 
auswählen und dann kompilieren (fehlerfrei sach ich mal) und dann kommt 
die hex-Datei ganz von alleine. Und dann klappts auch mit dem Blinken 
...

Autor: Willi Wacker (williwacker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, eins noch: warum hast Du es auf einmal so eilig? 19 Jahre ging 
es ohne CV und dann wirst Du bereits nach 10 Minuten ohne Antwort 
unruhig?

Einfach mal diesen Thread durchsuchen, da gibt es mehrere Anfängerfragen 
- und auch andere - zum CV.

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für alle tips hab jetzt ein Programm geschrieben welches drei LED 
nacheinander blinken lässt:

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 19.03.2008
Author  :
Company :
Comments:


Chip type           : ATmega8L
Program type        : Application
Clock frequency     : 4,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>
// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In 
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T 
State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out 
Func0=Out
// State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 
State0=0
PORTD=0x00;
DDRD=0x07;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
      {



       PORTD.0=0;
       delay_ms (100);
       PORTD.0=1;

       PORTD.1=0;
       delay_ms (100);
       PORTD.1=1;

       PORTD.2=0;
       delay_ms (100);
       PORTD.2=1;



      };
}


möchte aber jetzt über einen Taster sie wieder ausschalten können:

Macht man das mit dem if-Befehl, wenn ja wäre ich für ein Beispiel sehr 
dankbar.

ich dachte da ansowas in der art hat aber nicht geklappt


 if (PORTB.0=0)  // Taster an PORTB.0 angeschloßen durch drücken ist 
PORTB.0 auf low (GND)

      {

       PORTD.0=1;  //LED an PORTD.0 geht aus

      };

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> if (PORTB.0=0)
Das ist ja auch Unsinn! Der "="-Operator ist ein Zuweisungs-Operator. Du 
willst hier aber sicher keine Zuweisung, sondern einen Vergleich machen. 
Dazu musst Du dann den Vergleichsoperator "==" benutzen.
if(PORTB.0 == 0)
{}
oder kürzer
if(!PORTB.0)
{}

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt das Programm geändert um den Effekt besser zusehen. Aber das 
mit dem Taster die eine LED ausschalten funktioniert leider nicht mache 
ich was bei dem IF-Befehl falsch ?

while (1)
      {


       PORTD.0=0;      //LED 1 an


       PORTD.1=0;      //LED 2 an


       PORTD.2=0;      //LED 3 an


      if (PORTB.0==0)  // Taster an PORTB.0 angeschloßen durch drücken 
ist PORTB.0 auf low (GND)

      {

       PORTD.0=1;  //LED an PORTD.0 geht aus

      };



      };

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Vitalij K.:

Hast Du den CodevisionAVR Compiler gekauft ?

Gruß Sven

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jap unzwar hier-> http://www.delcomp.com/codevision/download.htm


kann mir denn einer weiter helfen bei meinem problem mit dem taster bzw. 
if-befehl

Autor: Kai E. (kai20)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Vitalij,

mit deinem Programm schaltest du die LED sehr sehr kurz aus,
sodass du es nicht siehst.
Gehe mal dein Programm durch und versuche doch mal nachzuvollziehen,
was genau geschieht...

Es wäre sicherlch sinnvoller, wenn du dich etwas in das AVR Tutorial
und in die C Programmierung einliest und dann erst mit einem einfachen
Programm beginnst.

Grüße,
Kai

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@KAI

Ich habe mich in AVR Tutorial eingelesen leider funktionieren die 
befehle bei CodeVision nicht :

mein Programm macht ja nix anderes als die drei LEDs einschalten

       PORTD.0=0;      //LED 1 an


       PORTD.1=0;      //LED 2 an


       PORTD.2=0;      //LED 3 an

und dann wollte ich über den Taster die erste LED ausschalten in dem ich 
das mit dem If-Befehl vergleiche oder muss das anders geregelt werden im 
AVR-Tutorial wird das ja über kopieren gemacht

 in r16, PIND      ; an Port D anliegende Werte (Taster) nach r16 
einlesen
         out PORTB, r16    ; Inhalt von r16 an Port B ausgeben
         rjmp loop         ; Sprung zu "loop:" -> Endlosschleife


aber wie geht das bei CodeVision ich dachte über den IF-Befehl so

if (PORTB.0==0)  // Taster an PORTB.0 angeschloßen durch drücken ist 
PORTB.0 auf low (GND)

      {

       PORTD.0=1;  //LED an PORTD.0 geht aus

      };
BITTE um hilfe komme nicht weiter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vitalij K. wrote:
> @KAI
>
> und dann wollte ich über den Taster die erste LED ausschalten in dem ich
> das mit dem If-Befehl vergleiche oder muss das anders geregelt

Nö. Das dürfte schon stimmen.
Nur was du übersiehst ist, daß dein Prozessor diese Schleife
ein paar Zehntausendmal in der Sekunde abarbeitet.

D.h. Wenn die Taste gedrückt ist, dann schaltet sie der
nächste Schleifendurchgang gleich wieder ein, woraufhin
sie das if wieder ausschaltet, usw. Deine LED blinkt
also in Wirklichkeit. Rasend schnell, aber sie blinkt!
int main()
{
  DDRD = 0x07;

  DDRB = 0x00;
  PORTB = 0x01;     // Pullup Widerstand an PB0 einschalten

  while (1)
  {
    if( PORTB.0 == 0 )  // Ist Taste1 gedrückt ?
      PORTD.0 = 1;      // Ja: LED 1 aus
    else
      PORTD.0 = 0;      // Nein: LED 1 an
  }
}

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Programm jetzt so umgeschrieben aber die erste LED geht immer 
noch nicht aus wo liegt der fehler?


#include <mega8.h>

void main(void)
{

DDRD= 0x07;         //PORTD.0 bis PORTD.2 ist auf Ausgang gesetzt

DDRB=0x00;          //PORTB.0 ist auf Eingang gesetzt
PORTB=0x01;         //Pullup widerstnd an PORTB.0 ist an


while (1)
{


if (PORTB.0==0)     //Ist PORTB.0 auf Eingang?
{

PORTD.0=1;          //JA dann LED1 aus

}


else
{

PORTD.0=0;           //NEIN dann LED1 weiterhin an

};

};

}

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du wirst ohne Kenntnis der Prozessorarchitektur und ohne wirklich ganz 
elementare C-Kenntnisse nicht weiterkommen.
Nimm die Hinweise von allen Seiten ernst und arbeite dich durch. Damit 
meine ich nicht durchlesen, sondern verstehen.
Mein letzter Tip in dieser Sache: willst du einen Eingang lesen, musst 
du das PINx-Register als Datenquelle wählen. PORTx liest immer nur das, 
was reingeschrieben wurde, nicht den wirklichen Eingangspegel.
Also  nicht
if (PORTB.0==0)

sondern
if (PINB.0==0)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vitalij K. wrote:
> Habe das Programm jetzt so umgeschrieben aber die erste LED geht immer
> noch nicht aus wo liegt der fehler?

Mist. Mein Fehler.

Wenn man den externen Status an einem Port abfragen will, dann
macht man das über das PIN Register, nicht PORT
#include <mega8.h>
 
void main(void)
{
  DDRD = 0x07;         //PORTD.0 bis PORTD.2 ist auf Ausgang gesetzt
 
  DDRB = 0x00;          //PORTB.0 ist auf Eingang gesetzt
  PORTB = 0x01;         //Pullup widerstnd an PORTB.0 ist an
 
  while (1)
  {
    if (PINB.0 == 0)     //Ist PORTB.0 auf Eingang?
    {
      PORTD.0 = 1;          //JA dann LED1 aus
    }
    else
    {
      PORTD.0 = 0;           //NEIN dann LED1 weiterhin an
    }
  }
}


Und arbeite an deiner Quelltextformatierung! Der Stil in dem
du zur Zeit schreibst ist einfach nur grauslich. Ein guter
Stil hilft auch bei der Übersicht in einem Programm. Jede
2.te Zeile als Leerzeile auszuführen bewirkt nur eines: Das
Programm wird völlig unnötig in die Länge gezogen.

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JA wo kann ich das denn alles nachlesen im AVR-Tutorial ist ja nix auf 
CodeVision bezogen . Kannst du mir paar links schicken oder einbeispiel 
geben und erklären was was ist.....

Autor: Kai E. (kai20)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

bist du sicher, dass überhaupt dein Programm ausgeführt wird,
also z.B. deine Fuse Bits korrekt gesetzt/gelöscht sind ?
Also für z.B. externe Clock ein Quarz angeschlossen ist etc ?

Füge einfach mal VOR dem while(1)

PORTD.0=0;
delay_ms(500);
PORTD.0=1;
delay_ms(500);
PORTD.0=0;

hinzu.
Wenn die LED den Zustand nicht ändert, wird dein Programm gar nicht 
ausgeführt...

Grüße,
Kai

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> JA wo kann ich das denn alles nachlesen im AVR-Tutorial ist ja nix auf
> CodeVision bezogen . Kannst du mir paar links schicken oder einbeispiel
> geben und erklären was was ist.....
AVR-GCC-Tutorial
Bezieht sich zwar auf den GCC, geht aber (bis auf die Einbindung der 
Bibliotheken und einiger Funktionen) auch mit CodeVision.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vitalij K. wrote:
> JA wo kann ich das denn alles nachlesen im AVR-Tutorial ist ja nix auf
> CodeVision bezogen .

Das macht herzlich wenig. Die Prinzipien, wie ein Megaxx funktionioniert
sind immer noch die Gleichen.

Und soweit wirst du schon noch abstrahieren können, dass ein

   PORTB = ( 1 << PB0 );

einem

   PORTB.0 = 1;

entspricht. In beiden Fällen wird das Bit 0 am Port B auf 1
gesetzt. Beim Codevision steckt das Bit 0 hier:   PORTB.0
                                                       ***
und beim gcc steckt es in der Syntax hier:  1 << PB0
                                                 ***

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl heinz Buchegger  viele dank für die Hilfe nur leider funktioniert 
das Programm immer noch nicht

die LEDs leuchten alle, jedoch geht die erste LED beim betätigen des 
Tasters nicht aus eine Idee warum nicht?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vitalij K. wrote:
> @Karl heinz Buchegger  viele dank für die Hilfe nur leider funktioniert
> das Programm immer noch nicht
>
> die LEDs leuchten alle, jedoch geht die erste LED beim betätigen des
> Tasters nicht aus eine Idee warum nicht?

Was weis ich, Verkabelung?
(Dein Blinktest hat doch funktioniert, oder nicht?. Nur damit
man ausschliessen kann, dass das Pgm gar nicht gebrannt wurde)

Was it mit dem hier?
#include <mega8.h>
 
void main(void)
{
  DDRD = 0xFF; 
  DDRB = 0x00;
  PORTB = 0xFF;
 
  while (1)
  {
    PORTD = PINB;
  }
}

Ein paar Taster am Port B an paar LED am Port D, und wenn
du an den Tastern rumspielst, müsste sich auf der gleich-zahligen
LED was tun. (Also LED 0 müsste auf Taster 0 reagieren, Led 1 auf
Taster 1, usw.)

Die Taster muessen nach Masse schalten. D.h. der Port Pin am Port B
ist bei nicht gedrückten Taster auf +5V (mit Voltmeter nachmessen)
und wenn die Taste gedrückt ist, dann ist der Pin auf 0V (ebenfalls
mit Voltmeter nachmessen)

Autor: Kai E. (kai20)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi nochmal,

im Forum unter Linksammlung - Tutorials und Beispiele - C sind einige 
Links,
es macht Sinn, dich dort durchzuarbeiten !

Kai

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Kai

Das Programm wird ausgeführt die LED veränder ihren zustand hab ich grad 
ausprobiert

Autor: Marc Meise (bytewood) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Vitalij

Wie schon so oft gesagt, lies und verstehe das AVR-GCC-Tutolial

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Nicht jeder C-Compiler versteht den direkten Zugriff auf ein Bit à la 
PORTB.x=1 oder PORTB.1=0.

Aber der Codevision versteht auch PORTB|=(1<<x) bzw. PORTB&=~(1<<x), wie 
es im AVR-GCC-Tutorium steht.

Also kannst Du die Beispiele aus dem Tutorium genauso anwenden, wie sie 
auch drin stehen.

Autor: Vitalij K. (kingvita1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute abgesehn von dem Programm mit dem Taster. Gibt es ne 
Möglichkeit bei dem Programm was ich für das LED-Lauflicht geschrieben 
habe die geschwindigkeit per Trimmer oder noch besser per Poti 
einzustellen. Falls ja hat einer ne idee wie man das mach hardwaremäßig 
und auch mit dem code:

hier mein Lauflicht Programm

#include <mega8.h>
#include <delay.h>

void main(void)
{

PORTD=0x00;
DDRD=0x07;


while (1)
      {
       PORTD.0=0;
       delay_ms (100);
       PORTD.0=1;

       PORTD.1=0;
       delay_ms (100);
       PORTD.1=1;

       PORTD.2=0;
       delay_ms (100);
       PORTD.2=1;
      };
}

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hmmm, ich bin sicher, dass schon mehrfach auf das AVR-GCC-Tutorial 
hingewiesen wurde...

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaube auch, dass dein Bonus nun aufgebraucht ist.
Setz dich hin, mach mal was selbst. zeige, was du gemacht hast (ausser 
irgendwas zusammenkopiertes) und dann gehts auch mit der Hilfe weiter.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.