-         

Ergebnis 1 bis 9 von 9

Thema: Anfängerfrage

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2008
    Beiträge
    5

    Anfängerfrage

    Anzeige

    Hallo zusammen,

    Hab jetzt das RN-Control und fühle mich etwas erschlagen. Hab mir zwar schon diverse Artikel im Wissensbereich durchgelesen, fühle mich aber noch nicht so sicher, als ob ich das erste Programm zum laufen bringen würde. Gibts irgendwo ein gutes Tutorial, was einem vom Auspacken bis zum Übertragen des ersten Programmes begleitet? Grad das Einstellen der Compiler usw. weiß ich nicht, obn ich dies vollständig habe oder da was fehlt. Ich würde am liebsten mit Win-AVR programmieren, aber zu Bascom wäre auch schön

    Und noch eine Frage zum Thema Stromanschluß. Wollte den wandler von meiner externen Festplatte nutzen. Bei Output steht 12V und 2A. Die 2A sind aber bestimmt als Maximalstrom zu verstehen, oder? Demzufolge sollte der ja reichen als Stromversorgung. Jetzt hat der aber so einen runden Stecker (s. bild unten). Und ich bin grad am knobeln, wie ich es am besten hinkriege, damit ich am ende 2 Kabel hab, ich ich anklemmen kann. Wie habt ihr das gelöst? Alternativ hab ich noch ein 9V Batterie hier. Aber steht leider nicht drauf was die an Strom liefern kann. Sollte so eine Batterie reichen, wenn man zu Anfang grad nur die integrierten LEDs ansteuern will?

    Hier nochmal das Bild, so sieht mein Anschluß auch aus.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    18.12.2006
    Ort
    Oderberg
    Alter
    25
    Beiträge
    870
    Hi,
    das Tutorial hier ist doch garnicht schlecht im Wiki, schonmal bisschen drin gelesen?
    Für C: http://www.roboternetz.de/wissen/ind...ie:Quellcode_C
    Für Bascom: http://www.roboternetz.de/wissen/ind...ellcode_Bascom

    http://halvar.at/elektronik/mikrocon..._wie_anfangen/
    http://halvar.at/elektronik/kleiner_...rs/programmer/
    http://www.mikrocontroller.net/artic...R-GCC-Tutorial
    http://www.mikrocontroller.net/articles/AVR-Tutorial

    Ja, 2A ist die max Stromstärke die das Netzteil verträgt.
    Naja das ist ein Stecker, da wär wohl eine Buchse nicht das Schlechteste oder?
    http://www.reichelt.de/?;ACTION=3;LA...5fa766c7646f65 (gibts auch in 2,1mm)
    Das sollte ein 9V Block schaffen, aber auf Dauer ist ein Netzteil wohl sinnvoller.
    Wenn du das Netzteil nicht mehr für andere Dinge benötigst, könntest du den Stecker auch einfach abschneiden
    MfG Christopher \/


  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2008
    Beiträge
    5
    Hallo Christopher1,

    danke für deine Antwort. Ja, Wiki hab ich am Anfang schon gelesen, und das hat mich am Anfang ein bisschen erschlagen. Aber mittlerweile hab ich einen guten Überblick, denk ich . Gibt wirklich sehr viel gute C-Quellcodes, die sind mir erst garnicht so aufgefallen. Die anderen Links werde ich mir die nächsten Tage in ruhe mal anschauen. Aber schonmal danke dafür

    Hm...Buchse, ja gute Idee. Aber noch besser war der Vorschlag einfach den dummen Stecker abschneiten Hab ein altes Handyladegerät gefunden mit 7.5V und 0.4A, das reicht fürs Erste. Keine Ahnung wieso ich selber an sowas nicht gedacht habe ^^ Was passiert eigentlich wenn das Board im Betrieb zu wenig Strom erhält? Fallen erst einzelne Komponenten aus, die am meisten brauchen oder geht es quasie sofort komplett aus?

    Hab noch 2 fragen zur programmiertechnischen Seite.

    Wenn ich schreibe:

    DDRC = 0xFF;

    klappt das wunderbar. Nun weiß ich allerdings laut Datenblatt, das DDRC bei 0x34 ist.Wieso klappt es dann nicht, wenn ich

    0x34 = 0xFF;

    schreibe? Muss ich da noch was mit Pointern beachten, obwohl ich das eigentlich kaum glaube. In der Include ist ja DDRC mit 0x14 deklariert und der Offset dafür ist ja 0x20. Das macht nunmal 0x34, genau wie es im Datenblatt steht.

    Zu meinem zweiten Problem. Gleich eins vorneweg, mir fehlt das Kabel, um Daten auf den PC anzeigen zu lassen. Jetzt hab ich ein Programm geschrieben, was bei drücken eines Tasters eine bestimmt LED-Sequenz abspielen soll. Jetzt scheint es wohl so zu sein, die Spannungen durch die Taster an PORTA7 von Board zu Board unterschiedlich sind? Liege ich da richtig? Muss ich also so lange mit den Grenzen rumspielen bis es hinkommt?
    Erst dacht ich das liegt an der Frequenz für den ADC. Aber ich hab im Makefile die 16MHz und für ADPS ein Vorteiler von 128. Und wenn ich im Makefile auf 1MHz stele, reicht es aus wenn ich den Vorteiler auf 8 stelle?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Versuchs mal so:

    *((unsigned char*)0x34) = 0xFF

    Das Macht dir aus 0x34 nen Pointer, der auf 0x34 zeigt. Und der * davor dereferenziert diesen dann wieder.

    Zur Frequenz:
    Diese stellst du NICHT im makefile ein, sondern ausschließlich über die Fusebits und ggf. über den angeschlossenen Quarz. Im makefile muss dies dann daran angepasst werden!

    Die Spannungen der Taster können aber durchaus variieren. Daher solltest du am Anfang einfach mal ein paar Kalibrierungsmessungen machen. Du könntest ja z.B. den aktuellen Messwert einfach an den LEDs ausgeben...

    Gruß,
    Thomas

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2008
    Beiträge
    5
    Hallo zerush,

    danke für die schnelle Antwort. Das mit den Pointern werd ich dann mal so probieren, aber im Endefekt fährt man mit den Platzhaltern wohl doch viel besser.

    Ich hab grad mal die Spannung gemessen, die anliegt wenn ich die einzelnen Taster drücke. Hab da Werte um 1.65V für T1 bis 0.45V füt T5. Nun sind das in dem Beispielprogrammen aber wesentlich andere Bereiche. Sind meine Werte realistisch? Hab die auch grad mal probiert und es hat sich nix geändert. Er wechselt spontan zwischen Taster 3 - 5.
    Mir fällt grad auf, der wandelt die Spannung ja von alleine in eine uint16_t. Da bräuchte ich ja nur 1 uint16_t wert und die Spannung und kann mir den Rest selber ausrechnen. Weiß jemand wie grad die maximale Spannung ist, die er in den Wert rein bekommt?

    Zu der Taktfrequenz. Kann man die auch mit WinAVR ändern? Warum ist CKSEL=1111 für den 16MHZ Quarz das richtige? In der Beschreibung erkenne ich nichts, was darauf hindeutet. Was bedeutet allgemeint Start up time: x CK + y ms? Ist y die Zeit bevor er überhaupt anfängt und x die Takte, die er zum einschwingen braucht? ODer wie muss man das ganze verstehen? Kann ich bedenkenlos alle Int. RC Osc. auswählen? Macht das der Atmel mit? Und nur bei Ext. darf ich nur den einen nehmen, der für den 16MHz Quarz gedacht ist?
    Oder macht es aus Engietechnischer Sicht fast keinen Sinn, den Controller runterzutakten, wenn man könnte?

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    32
    Beiträge
    246
    Zu den Pointern. Du solltest immer wenn möglich die definierten Platzhalter verwenden (also PORTC, PINA, ADMUX, ...). So sieht man, was gemeint ist, und es funktioniert meistens auch, wenn man mal den Controller wechselt!

    Also die maximale Spannung ist Vref (abhängig von der ADC Einstellung und dem Jumper vom RN-Control) und ergibt dir dann als Wert 1024.
    Wenn also die Einstellungen die externe Referenzspannung verwenden, und dort 5V anliegen, dann entsprechen 5V am ADC-Pin 1024.

    Die Startup-Time ist dafür da, dem Quarz ein wenig Zeit zu geben, bis es sich eingeschwungen hat, damit du dann eine stabile, gleichmäßige Frequenz bekommst.
    Die internen RC Osc. kannst du alle bedenkenlos auswählen, wenn du jedoch einen Quarz dran hast, ist es empfehlenswert, diesen auch zu benutzen (bis zu 16MHz möglich und wesentlich genauer!!). Klar, umso langsamer er läuft, umso weniger verbraucht er auch.

    Du musst halt noch aufpassen, dass du Ext. Chrystal wählst und nicht Ext. Clock oder Ext. Oscillator. Dann brauchst du nämliche nen externen Takerzeuger. Also einen anderen Controller oder einen Quarzoszillator!

    mfg,
    Thomas

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2008
    Beiträge
    5
    Code:
    #include <stdint.h>
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    int main(void){
    	
    	DDRC = 0xFF;
    	PORTC = 0xFF;
    	
    
    	uint16_t wert = 0; 
    	//vorteiler 128
    	ADCSRA = (1<<ADEN)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);	
    	
    	//REFS1:0 AREF, Internal Vref turned off: wurde in den beispielprogrammen genauso gewählt
    	//single endet input
    	ADMUX = 7;
    	
    	//Analog comperator, richtig wenn es von alleine auf Tastendrck triggern soll?
    	SFIOR = (1<<ADTS0)|(0<<ADTS1)|(0<<ADTS1);
    	
    	//keine Taste gedrückt
    	while(ADCSRA & (0<<ADSC)) {}
    	//taste gedrückt, hat angefangen zu wnadeln
    	while(ADCSRA & (1<<ADSC)) {} 	
    	
    	wert = ADCW;	 
    
    	
    	ADCSRA &= ~(1<<ADEN);
     
    	//wie bekomme ich die untersten 8bit von 'wert' auf meine 8 LEDs?
    	PORTC = 0x00;
    }
    Ich wollte mir jetzt ein kleines Programm schreiben, was automatisch triggert wenn eine Taste gedrückt wird.nach der Wandlung sollen die unteren 8 Bits auf den LEDs ausgegeben werden.Wie ich das mit den Bits machen weiß ich noch garnicht, aber das automatische Triggern funktioniert schon nicht (LEDs leuchten ohne das Taste gedrückt wird).

    Ich hoffe mal mein ADCSA Stimmt schonmal. Beim ADMUx das REFS1:0 bin ich mir nicht sicher, ob das so stimmt, aber in den Beispielen war es auch immer so. Welche Spannung ist denn AREF? Bei dem SFIOR bin ich mir auch recht unsicher. Und kann man das dann mit den beiden whileschleifen so machen?

    Zu den Pointern. Du solltest immer wenn möglich die definierten Platzhalter verwenden (also PORTC, PINA, ADMUX, ...). So sieht man, was gemeint ist, und es funktioniert meistens auch, wenn man mal den Controller wechselt!

    Also die maximale Spannung ist Vref (abhängig von der ADC Einstellung und dem Jumper vom RN-Control) und ergibt dir dann als Wert 1024.
    Wenn also die Einstellungen die externe Referenzspannung verwenden, und dort 5V anliegen, dann entsprechen 5V am ADC-Pin 1024.

    Die Startup-Time ist dafür da, dem Quarz ein wenig Zeit zu geben, bis es sich eingeschwungen hat, damit du dann eine stabile, gleichmäßige Frequenz bekommst.
    Die internen RC Osc. kannst du alle bedenkenlos auswählen, wenn du jedoch einen Quarz dran hast, ist es empfehlenswert, diesen auch zu benutzen (bis zu 16MHz möglich und wesentlich genauer!!). Klar, umso langsamer er läuft, umso weniger verbraucht er auch.

    Du musst halt noch aufpassen, dass du Ext. Chrystal wählst und nicht Ext. Clock oder Ext. Oscillator. Dann brauchst du nämliche nen externen Takerzeuger. Also einen anderen Controller oder einen Quarzoszillator!

    mfg,
    Thomas
    Also für den Ext. Crystlar/Resonator kan nich nur High, Medium und Low einstellen. Das dann das High die 16MHz sind erschient logisch. Woher weiß ich nun wieviel Medium und Low genau ist?

    Also an den Jumper hab ich nix gemacht. Und die Einstellung hatte ich immer, wie in dem Beispiel oben, nur ihne der versuchten Autotriggerung. Also genau so wie es auch in den Testprogrammen war. Und woher weiß ich jetzt das Vref? Sorry, aber irgendwie blicke ich da noch nicht ganz durch.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    16.08.2008
    Beiträge
    5
    Hallo,

    kann mir wirklich niemand bei meinem Programm helfen?

    mfg
    Ralf

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Für die Fuseeinstellungen:
    Low bis 3MHz
    Medium bis 8MHz
    High bis 16MHz Hier sollte auch CKOPT aktiv sein
    Ich habe mir dein Programm nicht angeschaut ob es so funktioniert aber die Ausgabe auf die LEDs PORTC = wert;
    Ab //keine Taste gedrückt gehört das ganze in eine Endlosschleife sonst läuft es genau einmal und so schnell kannst du nicht drücken.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •