Hallo zusammen,
ich habe eine frage zum AVR Studio 6. Ich hab mir für mein Projekt was
ich gerade mache ein C Programm geschrieben und will dieses jetzt im AVR
einfügen. ich bekommen nen Haufen Fehlermeldungen bzgl der includes. Wie
könnte man diese Bibliotheken (zB include <conio.h>, etc) ins AVR Studio
einfügen? Bzw. was müsste ich tun, damit ich diesen Quellcode
implementieren kann?
Ich bin noch zimelicher Leie was AVR Studio angeht...sonst immer nur C
geprogt.
Kurze Erklärung: Ich hab ein 64 Bit Muster was ich in meinem µC
zwischenspeichern will, um es dann an 8 schieberegister 74hc595 zu
senden.
Mit dem Quellcode erzeuge ich mir ein beliebiges 64 Bit-Muster! Dieses
soll dann ambesten im Ram gespeichert werden, da dieser beim ATMEGA 32,
welchen in verwende, ja 2 KByte groß ist. Ich habe im Programm das 64
Bit Wort in 2 x 32 Bits aufgeteilt. Ist aber eigetnlich nicht notwenig
oder ist es nicht möglcihe in 64 Bitword direkt im ATEMGA32 abzulegen?
Wenn es doch möglich sein sollte, wo kann ich es dann ablegen?
Das Bitwort soll Bitweise in die 8 in Reihegeschalteten 595
reingeschoben werden.
Vielen Dank für´s Durchlesen ich freu mich über jeden Antort!:D
Mfg
1
//#include <stdio.h>
2
//#include <stdlib.h>
3
//#include <conio.h>
4
//#include <string.h>
5
//#include <ctime>
6
//#include <iostream>
7
//#include <cstdlib>
8
#include<avr/delay.h>
9
#include<ctype.h>
10
#include<avr/io.h>
11
usingnamespacestd;
12
13
stringzufallscode()
14
{
15
chartable[]="ABCDEF0123456789";
16
17
srand(time(NULL));
18
stringsalat;
19
20
for(inti=0;i<16;i++)
21
{
22
intc=rand()%15;
23
salat.push_back(table[c]);
24
}
25
// cout << salat << '\n';
26
returnsalat;
27
}
28
29
30
31
intBitfolge(void)
32
{
33
inti,Bit;
34
charBitfolge[17];
35
stringZufall;//ist noch kein ascii folge
36
Zufall=zufallscode();
37
charsLOW32[9],sHigh32[9];
38
charNullen[17]="0000000000000000";
39
//char buffer [sizeof(long)*8+1];
40
chars64[17],Helfer[17]="";
41
longlLow32,lHigh32;
42
//printf ("Enter a number: ");
43
// scanf ("%d",&i);
44
// ltoa (i,s64,16);
45
46
zufallscode();
47
strcpy(s64,Zufall.c_str());//(ziel, Quelle) (s64, ausgabewert der funktion oben)
Paavo Varniery schrieb:> ich habe eine frage zum AVR Studio 6. Ich hab mir für mein Projekt was> ich gerade mache ein C Programm geschrieben und will dieses jetzt im AVR> einfügen. ich bekommen nen Haufen Fehlermeldungen bzgl der includes. Wie> könnte man diese Bibliotheken (zB include <conio.h>, etc)
Ähm.
Gar nicht?
Um beim Beispiel zu bleiben: conio.h enhtält die Header von
Konsolenfunktionen, also Dinge wie Cursorsteuerung etc.
Auf einem AVR hast du keine Konsole.
Und wenn du eine hast, dann musst du dir die Konsolenfunktionen selber
machen, weil deine Hardware nun mal signifikant anders funktioniert als
die Konsole auf einem PC
> Ich bin noch zimelicher Leie was AVR Studio angeht...sonst immer nur C> geprogt.
Echt.
> string salat;>
....
> salat.push_back(table[c]);
glaub ich nicht.
Das ist C++
Du kannst da eine Menge rauswerfen.
Darf ich vorschlagen, dass du dort anfängst, wo alle anfangen?
Bei den allereinfachsten Grundlagen:
Die DDR Register und welche Bedeutung sie haben
Wie man einen Ausgangspin auf 1 bzw 0 stellt.
Dann hängst du mal 1 LED an einen Pin und spielst mit der.
LED leuchten lassen, LED nicht leuchten lassen, LED blinken lassen.
Dann das ganze mit mehreren LED
Eventuell vielleicht mal ein Lauflicht
Irgendwann kommt dann mal ein Taster dazu.
etc. etc.
Und dann, irgendwann mal, kommt ein Schieberegister.
AVR-GCC-Tutorial
Wow. Wo stammt das Programm her?
Wild per Copy&Paste aus dem Internet zusammengewürfelt? Dabei C und C++
Code vermischt?
Und dabei noch die Schlechtest-mögliche variante gewählt? Oder ist das
ein Scherz?
Per C++-String-Operationen eine Hexadezimal-Schreibweise eines Longs zu
erzeugen, um diese dann mit einer undurchsichten C -
strcat/cpy/.../strtoul Orgie in zwei Longs zu verwusten, nur um eine
Zufallszahl darin abzulegen?
Lass mich raten: Das Programm stammt aus einem anderen Forum(s-Thread),
und dort hat sich jemand einen Scherz erlaubt?
Da wäre ich mir jetzt auf Anhieb gar nicht so sicher, was da rauskommt.
Ich würde da deutlich mehr Klammern nehmen...
Und das ist für einen uC auch nicht schlecht:
Εrnst B✶ schrieb:> Wow. Wo stammt das Programm her?> Wild per Copy&Paste aus dem Internet zusammengewürfelt? Dabei C und C++> Code vermischt?> Und dabei noch die Schlechtest-mögliche variante gewählt? Oder ist das> ein Scherz?> Per C++-String-Operationen eine Hexadezimal-Schreibweise eines Longs zu> erzeugen, um diese dann mit einer undurchsichten C -> strcat/cpy/.../strtoul Orgie in zwei Longs zu verwusten, nur um eine> Zufallszahl darin abzulegen?>> Lass mich raten: Das Programm stammt aus einem anderen Forum(s-Thread),> und dort hat sich jemand einen Scherz erlaubt?
Danke für dein gutes Kommentar! Es war wirklich sehr hilfreich!
Paavo Varniery schrieb:> Es war wirklich sehr hilfreich!
Denk ich mir. Jetzt kannst du dem, der dir diesen Scherz gespielt hat,
auf die Finger klopfen.
Tipp zum Thema:
Lass das ganze std::string, char[], strcopy, strtoul -Zeuchs weg. Ja,
alles!
Dann erzeuge dir die Zufalls*Zahlen* als Zahl. Ohne
String-Zwischenschritt.
Dann gib deine Zahlen Bitweise aus.
Tipp2 dazu: Shift-Operationen mit variabler Shift-Weite mag der AVR
garnicht gerne.
Lieber jeden Schleifendurchlauf immer das erste Bit der Zahl ausgeben,
anschließend die ganze Zahl um eins weitershiften.
Paavo Varniery schrieb:
Was bitte ist an
> void send_char( uint64_t Bitmuster)> {> uint8_t n;> uint64_t Bitmuster[64]> ={0,0,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,
0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,0,1,1,1};
einfach?
1
voidsend_char(uint64_tBitmuster)
2
{
3
uint8_tn;
4
5
for(n=0;n<64;n++)
6
{
7
if(Bitmuster&0x01)
8
PORTD|=(1<<SHIFT_DATA);
9
else
10
PORTD&=~(1<<SHIFT_DATA);
11
12
PORTD|=(1<<SHIFT_CLOCK);
13
PORTD&=~(1<<SHIFT_CLOCK);
14
15
Bitmuster>>=1;
16
}
17
18
PORTD|=(1<<SHIFT_REG);
19
PORTD&=~(1<<SHIFT_REG);
20
}
Das wäre einfach. Und neben bei bemerkt auch noch richtig, was man von
deiner Port-Orgie nicht gerade behaupten kann.
Noch einfacher (auch für den AVR) wäre es, eine Funktion zu schreiben,
die lediglich 8 Bit raustaktet, und die dann einfach 8 mal mit den
einzelnen Bytes aufzurufen. Sonst schiebt sich der AVR mit den 64-Bit
Variablen zu Tode (aber ok. so schlimm ist das auch wieder nicht)
Ich will ja aber aus dem Bitmuster[] die einzelnen nullen und einsen
haben und die rüberschieben!? Also will ich mit der for-Anweisung die
jeweiligen Einträge des Arrays abarbeiten.
Paavo Varniery schrieb:> Ich will ja aber aus dem Bitmuster[]
und wozu brauchst du das Array?
Oder bist du Array-Fetischist?
Wozu ein Array aus 64 Stück uint64_t basteln, wenn es ein einziger(!)
uint64_t auch tut, den man dann eben Bit für Bit raustaktet.
Oder was glaubst du, was die Kombination aus
for( n = 0; n < 64; n++ )
{
if( Bitmuster & 0x01 )
...
Bitmuster >>= 1;
}
macht?
Karl Heinz Buchegger schrieb:> Paavo Varniery schrieb:>> Ich will ja aber aus dem Bitmuster[]>> und wozu brauchst du das Array?> Oder bist du Array-Fetischist?>> Wozu ein Array aus 64 Stück uint64_t basteln, wenn es ein einziger(!)> uint64_t auch tut
Nur um das ins rechte Licht zu rücken.
Du verbrauchst 64 * 8, gleich 512 Bytes, wo du mit einer 8-Byte Variable
auch auskommst.
Wieviel SRAM Speicher hat noch mal dein µC?
Oh, hier haben wir einen besser ausgebildeten, hochqualifizierten
Spezialisten, der dringend von Bundesregierung und Industrie gesucht und
angeworben wird gefunden.
Karl Heinz Buchegger schrieb:> Karl Heinz Buchegger schrieb:>> Paavo Varniery schrieb:>>> Ich will ja aber aus dem Bitmuster[]>>>> und wozu brauchst du das Array?>> Oder bist du Array-Fetischist?>>>> Wozu ein Array aus 64 Stück uint64_t basteln, wenn es ein einziger(!)>> uint64_t auch tut>> Nur um das ins rechte Licht zu rücken.> Du verbrauchst 64 * 8, gleich 512 Bytes, wo du mit einer 8-Byte Variable> auch auskommst.> Wieviel SRAM Speicher hat noch mal dein µC?
2Kbytes Internal SRAM
sollte also langen:D
Ich habe jetzt das uint64_t Bitmuster = 0xDE0BFCE86252724; festgelegt.
Und gebe es mit :
{ for ( n = 0; n <= 64; n++)
{
if( Bitmuster & 0x01 )
PORTD |= ( 1 << SHIFT_DATA );
else
PORTD &= ~( 1 << SHIFT_DATA );
PORTD |= ( 1 << SHIFT_CLOCK );
PORTD &= ~( 1 << SHIFT_CLOCK );
Bitmuster >>= 1;
}
PORTD |= ( 1 << SHIFT_REG );
PORTD &= ~( 1 << SHIFT_REG );
}
}
aus!
hab´s mal debugt und es sieht ganz gut aus bis darafu, dass mir AVR beim
bitmuster etwas merkwürdige werte anzeigt! erst kommt wie erwartet eine
bitfolge von 010101010100010 etc doch dann folgen darauf irgendwie
dezimal aussehende zahlen...duch &0x01 gucke ich mir ja immer nur das
erste Bit an(ob 0 oder 1) dann wird es rübergeschickt.
Paavo Varniery schrieb:> Ich bin noch zimelicher Leie was AVR Studio angeht...sonst immer nur C> geprogt.AVR Studio ist eine Entwicklungsentgebung, C eine Programmiersprache.
Paavo Varniery schrieb:> ja ihr habt ja recht c++
Nur weil der Name zweier Programmiersprachen mit dem selben Buchstaben
anfängt, muss das Zeug noch lange nicht durch den selben Compiler
passen.