Hallo, ich benutze ein AVR NET-IO mit eigener Firmware. Ich bin dabei eine Motorregelung zu basteln. Diese Motorregelung bekommt Drehzahlsensoren und regelt damit den angeschlossenen Elektromotor. Anfangs habe ich meine Firmware mit ISP übertagen, jetzt mit JTAG. Verwendet wird der Atmel-ICE Debugger: http://www.reichelt.de/?ARTICLE=143878&PROVID=2788&wt_mc=amc141526782519998&&gclid=CNiMvZTnzcYCFSb3wgod-2sOmA Momentan beschäftige ich mich damit, auf Pins ein Outputsignal zu geben, in meinem Fall 5V oder 0V. Motor läuft/ Motor läuft nicht. Angeschlossen habe ich dafür folgenden Drehzahlsteller: http://www.reichelt.de/?ARTICLE=47585&PROVID=2788&wt_mc=amc141526782519998&&gclid=CPf1xJjkzcYCFUL4wgodZPwELA Später soll auf einem bestimmten Pin natürlich ein PWM Signal sein um den Motor zu steuern, aber ich fange erstmal damit an für eine bestimmte Zeit 5V auf einen Pin zu geben. Zusätzlich zu dem AVR NET-IO Board verwende ich noch eine Anschlussplatine: http://www.pollin.de/shop/dt/NDQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_SUB_D_Anschlussplatine.html Auf der Anschlussplatine entsprechen die Pins Data0-Data7 dem PortC meines ATMEGA32. Auf einem Dieser Pins würde ich gerne 5V geben umd die Anschlussklemmen nutzen zu können. Deshalb habe ich einige Fragen zu den IO Pins: Zum JTAG debuggen sind die gelb markierten Pins schon belegt. Kann ich die freien Pins von Port C jetzt nicht mehr als IO Pins benutzen? Oder später als PWM Pins? Ich habe mit einem Voltmeter die Pins nach dem Hochsetzen gemessen und keine Veränderung festgestellt. Zum Testen habe ich auch mal alle Pins von Port B auf hoch gesetzt, da werden allerdings nur bestimmte(PB1,PB2 und noch ein paar) auf 5V gesetzt und manche bleiben 0V. Die Pins von PortC lassen sich gar nicht verändern. Das ist mein Code:
1 | if(a=='1'){ //am Terminal wurde 1 eingegeben |
2 | DDRB = 0xFF; //PortB als Output setzen |
3 | |
4 | PORTB |= (1 << PB0); //PB0 im PORTB setzen |
5 | PORTB |= (1 << PB1); |
6 | PORTB |= (1 << PB2); |
7 | PORTB |= (1 << PB3); |
8 | PORTB |= (1 << PB4); |
9 | PORTB |= (1 << PB5); |
10 | PORTB |= (1 << PB6); |
11 | PORTB |= (1 << PB7); |
12 | |
13 | // Analog für PortC:
|
14 | // PORTC |= (1<< PC0);
|
15 | // [...]
|
16 | |
17 | goto GOTOMARKE1; //Springt wieder ins Hauptmenu und wartet auf Eingabe |
18 | }
|
19 | |
20 | if(a=='2'){ //am Terminal wurde 2 eingegeben |
21 | DDRB = 0x00; //PortB als Input setzen |
22 | |
23 | PORTB &= ~(1 << PB0); //PB0 im PORTB löschen |
24 | PORTB &= ~(1 << PB1); |
25 | PORTB &= ~(1 << PB2); |
26 | PORTB &= ~(1 << PB3); |
27 | PORTB &= ~(1 << PB4); |
28 | PORTB &= ~(1 << PB5); |
29 | PORTB &= ~(1 << PB6); |
30 | PORTB &= ~(1 << PB7); |
31 | |
32 | goto GOTOMARKE1; //Springt wieder ins Hauptmenu und wartet auf Eingabe |
33 | |
34 | }
|
35 | |
36 | if(a=='3'){ //am Terminal wurde 3 eingegeben |
37 | //Einzelne Pins von DDRC als Output setzen:
|
38 | DDRC = 0b00000011; // PC0 und PC1 werden als Output gesetzt. Der Rest als Input |
39 | //PC0 und PC1 auf high setzen
|
40 | PORTC |= (1<<PC0); |
41 | PORTC |= (1<<PC1); |
42 | |
43 | goto GOTOMARKE1; //Springt wieder ins Hauptmenu und wartet auf Eingabe |
44 | }
|
Ich hoffe es ist verständlich, was mein Problem ist und ihr könnt mir helfen.